python - 如何一次旋转具有多列的 pandas 数据框(时间序列)?
问题描述
我有一个pandas
如下的日期框架,带有DATETIME
索引:
ID Val1 Val2
DATETIME
2019-01-18 10:35:00 A 482.84387 439.67942
2019-01-18 10:35:00 B -5.30216 20.22247
2019-01-18 10:40:00 A -790.63989 -810.00000
2019-01-18 10:40:00 B 257.00000 270.55490
2019-01-18 10:45:00 A 10.54820 5.64659
2019-01-18 10:45:00 B -85.50000 -89.00000
请注意,DATETIME
对于ID
s 重复。
我的目标是将其转换为以下内容(如果可能,根据 ID 更改列名):
A_Val1 A_Val2 B_Val1 B_Val2
DATETIME
2019-01-18 10:35:00 482.84387 439.67942 -5.30216 20.22247
2019-01-18 10:40:00 -790.63989 -810.00000 257.00000 270.55490
2019-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"
我不知道从那里去哪里。如果您能提供帮助,请提前致谢。
解决方案
使用DataFrame.reset_index
,传递DATETIME
给index
参数并最后MultiIndex
被f-string
s 展平:
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
推荐阅读
- numpy - 在 numpy 中,分别将 N 个百分位数应用于 N x M 数组
- javascript - 为什么不是这些 JSX
- 物品渲染?
- javascript - 灵活匹配两个阵列
- python - 以内核为输入的 TensorFlow Conv2D
- python - 为主程序创建一个新的单独窗口
- c# - C# 使 DateTime.TryParse() 不假定年份
- c# - winform滚动条自定义
- multithreading - 在单个 GPU 上使用多个主机线程
- c# - Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:S.路径'',第 0 行,位置 0。仅在某些构建上
- asp.net-core - 使用 ASP.NET Core 2.2 将 Autofac 多租户升级到 ASP.NET Core 5