繁体   English   中英

如何在pandas中转动multilabel表

[英]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的pandas文档似乎也没有提到任何相关内容。

您可以通过重塑pivotset_indexunstack ,但这时需要swaplevelsort_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM