【问题标题】:Pandas pivot to bar plot while sorting/preserving sort order from another column熊猫在从另一列排序/保留排序顺序时转向条形图
【发布时间】:2019-09-24 09:42:11
【问题描述】:

我有一个看起来像这样的 pandas 数据框:

Int64Index: 125 entries, 0 to 124
Data columns (total 5 columns):
Player          125 non-null object
PTS             125 non-null int64
Value           125 non-null object
FG              125 non-null int64
dtypes: int64(2), object(3)

我想构建一个堆积条形图,使用“值”作为堆栈的图例(堆积条的不同部分),使用“FG”作为值(堆栈每个部分的大小),使用“播放器”作为每个正在绘制的项目的 x 轴标签,并按“PTS”对项目进行排序。

我已经能够以多种不同的方式旋转这些数据并从中构建条形图,但它们都不能正确排序。如果我在旋转之前排序,排序顺序就会丢失。我一直无法找到一种方法将“PTS”列合并到枢轴中而不破坏我正在做的事情。

这构建了我想要的条形图,但没有排序(它还不是很漂亮,我可以稍后处理):

df.pivot(index='Value', columns='Player', values='FG').T.plot(kind='bar', stacked=True)

【问题讨论】:

  • 您的预期输出是什么?您希望播放器在PTS 中排序吗?
  • 你能分享一些数据吗?
  • @QuangHoang 是的
  • 只是好奇,PTS 如何与ValuesFG 一起使用。我的猜测是PTS 是上述条形的总高度?

标签: python pandas


【解决方案1】:

考虑创建一个玩家列表,然后按使用groupby聚合计算的总PTS降序排列。然后在旋转数据上的列的reindex 调用中使用此列表:

# AGGREGATE POINTS --> SORT --> RETRIEVE INDEX VALUES
sort_list = df.groupby('Player').sum().sort_values('PTS', ascending=False).index

# PIVOT --> REINDEX COLUMNS --> TRANSPOSE & PLOT
(df.pivot(index='Value', columns='Player', values='FG')
   .reindex(sort_list, axis='columns')                     # USING ABOVE SORTED PLAYER LIST
   .T
   .plot(kind='bar', stacked=True)
)

【讨论】:

  • 我最终放弃了 PTS 列并从 FG 数据重新创建它,但我对其进行了测试,这个解决方案确实有效,所以谢谢 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多