为了账号安全,请及时绑定邮箱和手机立即绑定

如何一次旋转具有多列的熊猫数据框(时间序列)?

如何一次旋转具有多列的熊猫数据框(时间序列)?

慕丝7291255 2023-02-12 19:14:46
我有一个pandas像下面这样的日期框,作为DATETIME索引:                                  ID      Val1       Val2DATETIME                                                2019-01-18 10:35:00                A      482.84387  439.679422019-01-18 10:35:00                B       -5.30216   20.222472019-01-18 10:40:00                A     -790.63989 -810.000002019-01-18 10:40:00                B      257.00000  270.554902019-01-18 10:45:00                A       10.54820    5.646592019-01-18 10:45:00                B      -85.50000  -89.00000请注意,DATETIME对于 s 重复了ID。我的目标是将其转换为类似以下内容(如果可能,列名根据 ID 更改):                                   A_Val1       A_Val2      B_Val1     B_Val2DATETIME                                                2019-01-18 10:35:00                482.84387   439.67942      -5.30216   20.222472019-01-18 10:40:00               -790.63989  -810.00000     257.00000  270.554902019-01-18 10:45:00                 10.54820     5.64659     -85.50000  -89.00000我用过pandas.pivot,但没用。df_2= df_1.pivot(index=df_1.index, columns='ID', values=['Val1', 'Val2'])错误是:"DatetimeIndex(['2019-01-18 10:35:00', '2019-01-18 10:35:00',\n  ....],\n  dtype='datetime64[ns]', name='DATETIME', freq=None) not in index"我不确定从那里去哪里。如果您能提供帮助,请提前致谢。
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

使用DataFrame.reset_index,传递DATETIMEindex参数并最后MultiIndexf-strings 展平:


df_2= df_1.reset_index().pivot(index='DATETIME', columns='ID', values=['Val1', 'Val2'])

df_2.columns = df_2.columns.map(lambda x: f'{x[1]}_{x[0]}')

print (df_2)

                        A_Val1     B_Val1     A_Val2     B_Val2

DATETIME                                                       

2019-01-18 10:35:00  482.84387   -5.30216  439.67942   20.22247

2019-01-18 10:40:00 -790.63989  257.00000 -810.00000  270.55490

2019-01-18 10:45:00   10.54820  -85.50000    5.64659  -89.00000


查看完整回答
反对 回复 2023-02-12
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

DataFrame.set_index另一种使用and 的方法DataFrame.unstack

df1 = df.set_index('ID', append=True).unstack()

df1.columns = df1.columns.map(lambda c: f'{c[1]}_{c[0]}')

结果:


# print(df1)

                        A_Val1     B_Val1     A_Val2     B_Val2

DATETIME                                                       

2019-01-18 10:35:00  482.84387   -5.30216  439.67942   20.22247

2019-01-18 10:40:00 -790.63989  257.00000 -810.00000  270.55490

2019-01-18 10:45:00   10.54820  -85.50000    5.64659  -89.00000


查看完整回答
反对 回复 2023-02-12
  • 2 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信