[英]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.