使用列名将Python Pandas中的日期转换为长数据

汉密

我在Python Pandas中有一个广泛的数据框,如下所示:

import pandas as pd
import numpy as np

df = pd.DataFrame({'student_id'  :[100, 101, 102],
                  'q1.cta1_count':[0, 1, 1],
                  'q1.cta1_date' :[np.nan, '2019-03-26', '2019-03-25' ],
                  'q1.cta1.reminder_count' :[0, 1, 0],
                  'q1.cta1.reminder_date'  :[np.nan, '2019-03-31', np.nan]})

df

在此处输入图片说明

并且我需要转换为长格式,以便它看起来像这样的数据帧:

# student_id type               count  date
# 100        q1.cta1            0      NaN
# 100        q1.cta1.reminder   0      NaN
# 101        q1.cta1            1      2019-03-26
# 101        q1.cta1.reminder   1      2019-03-31
# 102        q1.cta1            1      2019-03-25
# 102        q1.cta1.reminder   0      NaN

我怎样才能做到这一点?

sammywemmy

您可以使用从宽到长的pandas,但是首先需要重塑列以适合从宽到长格式的pandas

df.columns = ["_".join(entry.split("_")[::-1]) 
              if entry.endswith(("count", "date"))
              else entry
              for entry in df.columns]

现在,您可以重塑数据:

pd.wide_to_long(df, 
                ["count", "date"], 
                i="student_id", 
                j="type", 
                sep="_", 
                suffix=".+").reset_index()


                                  
  student_id    type                  count       date      
0  100      q1.cta1                 0          NaN
1  101      q1.cta1                 1          2019-03-26
2  102      q1.cta1                 1          2019-03-25
3  100      q1.cta1.reminder        0          NaN
4  101      q1.cta1.reminder        1          2019-03-31
5  102      q1.cta1.reminder        0          NaN

另外,您可以使用pyjanitor的ivot_longer函数,该函数是基于pandas的melt函数构建的,并提供了更多的灵活性(全面披露,我是该库的撰稿人):

import pyjanitor
df.pivot_longer(index="student_id", 
                names_to=("type", ".value"), 
                names_sep="_")

    student_id  type             count  date
0     100      q1.cta1              0   NaN
1     100      q1.cta1.reminder     0   NaN
2     101      q1.cta1              1   2019-03-26
3     101      q1.cta1.reminder     1   2019-03-31
4     102      q1.cta1              1   2019-03-25
5     102      q1.cta1.reminder     0   NaN

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用正确的列名将 JSON 转换为数据框

如何使用原始数据帧中的列名和行名将矩阵转换为数据帧

使用DataFrame的列名将DataFrame转换为多维数组

使用指定的列名将字典转换为DataFrame

通过枚举列名将长数据帧转换为单行数据帧

使用pivot_longer使用重复的列名将数据转换为long

使用 Pandas 将数据帧从长转换为宽

使用Pandas转换为长面板数据格式

根据列名将数据框转换为命名向量

如何根据列名将多行数据转换为 pd 数据框中的单行?

R通过拆分列名将df从宽转换为长

如何使用输入用户的列名将数据插入数据库

如何使用动态列名将其重塑为多层次,多顺序的宽数据

使用列名将多个数组保存到csv文件中

在R中拆分列名称并将数据从宽格式转换为长格式

使用 R 中的计数和百分比将长数据转换为宽数据

将通用日期转换为python中的datetime(pandas)

使用pandas to_string中的formatters参数转换为日期

将成对距离的长格式数据帧转换为python中的距离矩阵

使用R中的重复标识符将数据帧从长转换为宽

使用R行中存储的密钥将数据帧从宽格式转换为长格式

如何将日期时间的数据帧转换为仅时间?基本上删除Python Pandas中的date元素

python:使用添加的键名将Counter对象转换为json对象

在长格式数据框中使用不带列名的熔化将宽格式转换为长格式

使用相同的列名将数据从一个表添加到另一个表

将数据从宽转换为长(使用多列)

使用 SQL 将宽格式数据转换为长格式

使用 dplyr 将数据帧从宽转换为长

使用pivot_longer将长格式数据集转换为长格式数据集