[英]How to pivot multilabel table in pandas
我正在尝试导入有关不同商品价格变化的数据。 数据保存在MySQL中。 我已经以类似于以下内容的堆叠格式导入输入数据帧df
:
ID Type Date Price1 Price2
0001 A 2001-09-20 30 301
0002 A 2001-09-21 31 278
0003 A 2001-09-22 28 299
0004 B 2001-09-18 18 159
0005 B 2001-09-20 21 157
0006 B 2001-09-21 21 162
0007 C 2001-09-19 58 326
0008 C 2001-09-20 61 410
0009 C 2001-09-21 67 383
并且,为了执行时间序列分析,我想转换为另一种类似于以下的格式:
A B C
Price1 Price2 Price1 Price2 Price1 Price2
Date
2001-09-18 NULL NULL 18 159 NULL NULL
2001-09-19 NULL NULL NULL NULL 58 326
2001-09-20 30 301 21 157 61 410
2001-09-21 31 278 21 168 67 383
2001-09-22 28 299 NULL NULL NULL NULL
您可以通过重塑pivot
或set_index
与unstack
,但这时需要swaplevel
与sort_index
的预期Multiindex
列:
df1 = (df.drop('ID', axis=1)
.pivot('Date','Type')
.swaplevel(0,1, axis=1)
.sort_index(axis=1))
df1 = (df.drop('ID', axis=1)
.set_index(['Date','Type'])
.unstack()
.swaplevel(0,1, axis=1)
.sort_index(axis=1))
df1 = (df.set_index(['Date','Type'])[['Price1','Price2']]
.unstack()
.swaplevel(0,1, axis=1)
.sort_index(axis=1))
print (df1)
Type A B C
Price1 Price2 Price1 Price2 Price1 Price2
Date
2001-09-18 NaN NaN 18.0 159.0 NaN NaN
2001-09-19 NaN NaN NaN NaN 58.0 326.0
2001-09-20 30.0 301.0 21.0 157.0 61.0 410.0
2001-09-21 31.0 278.0 21.0 162.0 67.0 383.0
2001-09-22 28.0 299.0 NaN NaN NaN NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.