在 Pandas 中转置 MultiIndex
Transpose MultiIndex in Pandas
我有多个包含每个月账单信息的数据框,即一月、三月、四月等的数据。
我试图一次只对一个数据帧执行以下操作,以保持简单,因为我对 Pandas 还很陌生:
march = np.arange(27).reshape(3, 9)
march = pd.DataFrame(data=march, index=['A', 'B', 'C'], columns=['mar' + chr(ord('A') + i) for i in range(9)])
对其中一个数据帧进行多重索引:
dates = ['March']
cols = pd.MultiIndex.from_product([dates, march.columns.to_list()])
pd.DataFrame(march, columns=cols)
输出:
(https://i.stack.imgur.com/Wp3AH.png)
我希望它显示为转置数据框,即:
(https://i.stack.imgur.com/ucXAG.png)
我尝试了堆叠和取消堆叠,但它不起作用,只是恢复到未转置的格式。
我的最终目标是能够对多个数据帧执行此操作并将它们全部输出到一个 table 中,显示每个月及其各自的数据。
例如:
January February
A B C A B C
colA x x x x x x
colB x x x x x x
etc
抱歉,如果这看起来像是一个新手问题,我是 Pandas 的新手,并且发布的类似问题对我的情况不起作用。
对于 MultiIndex
将其分配回 march.columns
并进行整形使用 DataFrame.stack
and Series.unstack
:
dates = ['March']
march.columns = pd.MultiIndex.from_product([dates, march.columns.to_list()])
df = march.stack().unstack(0)
print (df)
March
A B C
marA 0 9 18
marB 1 10 19
marC 2 11 20
marD 3 12 21
marE 4 13 22
marF 5 14 23
marG 6 15 24
marH 7 16 25
marI 8 17 26
我有多个包含每个月账单信息的数据框,即一月、三月、四月等的数据。
我试图一次只对一个数据帧执行以下操作,以保持简单,因为我对 Pandas 还很陌生:
march = np.arange(27).reshape(3, 9)
march = pd.DataFrame(data=march, index=['A', 'B', 'C'], columns=['mar' + chr(ord('A') + i) for i in range(9)])
对其中一个数据帧进行多重索引:
dates = ['March']
cols = pd.MultiIndex.from_product([dates, march.columns.to_list()])
pd.DataFrame(march, columns=cols)
输出:
(https://i.stack.imgur.com/Wp3AH.png)
我希望它显示为转置数据框,即:
(https://i.stack.imgur.com/ucXAG.png)
我尝试了堆叠和取消堆叠,但它不起作用,只是恢复到未转置的格式。
我的最终目标是能够对多个数据帧执行此操作并将它们全部输出到一个 table 中,显示每个月及其各自的数据。
例如:
January February
A B C A B C
colA x x x x x x
colB x x x x x x
etc
抱歉,如果这看起来像是一个新手问题,我是 Pandas 的新手,并且发布的类似问题对我的情况不起作用。
对于 MultiIndex
将其分配回 march.columns
并进行整形使用 DataFrame.stack
and Series.unstack
:
dates = ['March']
march.columns = pd.MultiIndex.from_product([dates, march.columns.to_list()])
df = march.stack().unstack(0)
print (df)
March
A B C
marA 0 9 18
marB 1 10 19
marC 2 11 20
marD 3 12 21
marE 4 13 22
marF 5 14 23
marG 6 15 24
marH 7 16 25
marI 8 17 26