无论如何要在 Python 中重新排序数据透视表列?
Posted
技术标签:
【中文标题】无论如何要在 Python 中重新排序数据透视表列?【英文标题】:Anyway to reorder pivot table columns in Python? 【发布时间】:2022-01-13 00:41:22 【问题描述】:假设我有一个这样的数据透视表:
import pandas as pd
d = 'Col_A': [1,2,3,3,3,4,9,9,10,11],
'Col_B': ['A','K','E','E','H','A','J','A','L','A'],
'Value1':[648,654,234,873,248,45,67,94,180,120],
'Value2':[180,120,35,654,789,34,567,21,235,83]
df = pd.DataFrame(data=d)
df_pvt = pd.pivot_table(df,values=['Value1','Value2'], index='Col_A', columns='Col_B', aggfunc=np.sum).fillna(0)
df_pvt
我想要实现的是为 Col_B(突出显示)设置一个顺序,以便 Value1 和 Value2 的输出按 E、J、A、K、L、H 的顺序显示。
【问题讨论】:
【参考方案1】:在重塑之前将col_B
转换为分类:
(df.astype('Col_B' : pd.CategoricalDtype(['E', 'J', 'A', 'K', 'L', 'H'], ordered = True))
.pivot_table(values=['Value1','Value2'],
index='Col_A',
columns='Col_B',
aggfunc=np.sum)
)
Value1 Value2
Col_B E J A K L H E J A K L H
Col_A
1 0 0 648 0 0 0 0 0 180 0 0 0
2 0 0 0 654 0 0 0 0 0 120 0 0
3 1107 0 0 0 0 248 689 0 0 0 0 789
4 0 0 45 0 0 0 0 0 34 0 0 0
9 0 67 94 0 0 0 0 567 21 0 0 0
10 0 0 0 0 180 0 0 0 0 0 235 0
11 0 0 120 0 0 0 0 0 83 0 0 0
要对列重新排序,您可以使用相关的关键字参数重新索引:
(df.astype('Col_B' : pd.CategoricalDtype(['E', 'J', 'A', 'K', 'L', 'H'], ordered = True))
.pivot_table(values=['Value1','Value2'],
index='Col_A',
columns='Col_B',
aggfunc=np.sum)
.reindex(['Value2', 'Value1'], axis = 1, level = 0)
)
Value2 Value1
Col_B E J A K L H E J A K L H
Col_A
1 0 0 180 0 0 0 0 0 648 0 0 0
2 0 0 0 120 0 0 0 0 0 654 0 0
3 689 0 0 0 0 789 1107 0 0 0 0 248
4 0 0 34 0 0 0 0 0 45 0 0 0
9 0 567 21 0 0 0 0 67 94 0 0 0
10 0 0 0 0 235 0 0 0 0 0 180 0
11 0 0 83 0 0 0 0 0 120 0 0 0
【讨论】:
谢谢,如果我想在左侧显示枢轴的 Value2 部分,在右侧显示枢轴的 Value1 部分怎么办? 添加了重新排序列的选项以上是关于无论如何要在 Python 中重新排序数据透视表列?的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas Dataframe 数据透视表列和值顺序