在排序/保留另一列的排序顺序时,将数据透视到条形图

2024-04-24 08:07:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,看起来像这样:

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)

我想建立一个堆叠条形图,使用'Value'作为堆栈(堆叠条形图的不同部分)的图例,使用'FG'作为值(堆栈每个部分的大小),使用'Player'作为每个被绘制项目的x轴标签,并按'PTS'对项目进行排序。你知道吗

我已经能够用很多不同的方法来透视这些数据并建立一个条形图,但是没有一种方法能够正确排序。如果在透视之前进行排序,则排序顺序将丢失。我还没能找到一种方法,将“PTS”列合并到pivot中而不破坏我正在做的事情。你知道吗

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

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

enter image description here


Tags: columns数据项目方法object排序value堆栈
1条回答
网友
1楼 · 发布于 2024-04-24 08:07:11

在按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)
)

相关问题 更多 >