Pandas pivot_table,按列对值进行排序

Posted

技术标签:

【中文标题】Pandas pivot_table,按列对值进行排序【英文标题】:Pandas pivot_table, sort values by columns 【发布时间】:2017-04-28 10:14:45 【问题描述】:

我是 Pandas 的新用户,我喜欢它!

我正在尝试在 Pandas 中创建数据透视表。一旦我以我想要的方式拥有数据透视表,我想按列对值进行排名。

我附上了一张 Excel 中的图片,因为它更容易以表格格式查看我想要实现的目标。 Link to image

我已经通过 *** 进行了搜索,但无法找到答案。我尝试使用 .sort() 但这不起作用。任何帮助将不胜感激。

提前致谢

【问题讨论】:

请提供minimal reproducible example,同时检查how to make good pandas examples。 【参考方案1】:

这应该可以满足您的需求:

In [1]: df = pd.DataFrame.from_dict(['Country': 'A', 'Year':2012, 'Value': 20, 'Volume': 1, 'Country': 'B', 'Year':2012, 'Value': 100, 'Volume': 2, 'Country': 'C', 'Year':2013, 'Value': 40, 'Volume': 4])

In [2]: df_pivot = pd.pivot_table(df, index=['Country'], columns = ['Year'],values=['Value'], fill_value=0)

In [3]: df_pivot
Out [4]:
    Value     
Year     2012 2013
Country           
A          20    0
B         100    0
C           0   40

In [5]: df = df_pivot.reindex(df_pivot['Value'].sort_values(by=2012, ascending=False).index)

Out [6]: 
    Value     
Year     2012 2013
Country           
B         100    0
A          20    0
C           0   40

基本上它获取排序值的索引并重新索引初始数据透视表。

【讨论】:

感谢您的帮助!您的代码运行良好。很抱歉没有发布代码本身。下次我会这样做。 如果它适合你,你能接受答案吗?谢谢。 谢谢!只是一个小提示:[5] 中的最后一个命令应该是 df_pivot.reindex,而不是 df【参考方案2】:

您可以对数据透视表中的多个列进行排序。就我而言,我有邮政编码发生事故的概率和地址发生事故的概率,以降序排序并在热图中显示结果。

pivot = df.pivot_table(index=['postcode'],values=['probability_at_address','probability_at_postcode'],aggfunc='mean').sort_values(by=['probability_at_address','probability_at_postcode'],ascending=False)
fig,ax=plt.subplots(figsize=(10,20))
sns.heatmap(pivot,cmap="Blues",ax=ax)
plt.show()

【讨论】:

以上是关于Pandas pivot_table,按列对值进行排序的主要内容,如果未能解决你的问题,请参考以下文章

python Pandas - 按列对DataFrame排序

如何通过单击列的标题按列对 QTableWidget 进行排序?

在遵循特定结构的同时按列对多索引进行排序

Pandas Dataframe 按列排序[重复]

按列对python数组/recarray进行排序

如何按列对多维数组进行排序?