微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为条形图竞赛转换DataFrame

如何解决为条形图竞赛转换DataFrame

我的数据框的格式为:

Player | Team | Total_Points
  A       1         50
  B       2         75
  C       3         40
  A       1         45
  D       3         150

n个团队中有x个球员,并且一个团队中没有一个球员。我想按球员和球队进行条形图比赛(前10名球员的条形图比赛,n个团队的条形图比赛)。我希望将每次出现的团队都视为一个步骤。

我认为下一步是将原始数据框中的每一行都转换为类似的数据框(如果使用团队条形图):

Team_1_CumSum | Team_2_CumSum | Team_3_CumSum | Team_4_CumSum |
     50               0               0               0        
     50              75               0               0
     50              75              40               0
     95              75              40               0
     95              75             190               0

此后,我将参加条形图竞赛。

有关如何操作的任何想法

  1. 进行转化
  2. 之后的条形图比赛

对于转换,我尝试了:

df = df.groupby(['Team','total_points']).sum().groupby(level=0).cumsum().reset_index()

尚未到达条形图部分。有任何想法吗? :)

编辑:

斯科特·波士顿的答案有效!问题最终是我有2000多行,动画太长了。我现在想做的是:

Player | Team | Total_Points | Match_Number 
  A       1         50              1
  B       2         75              1 
  C       3         40              2
  A       1         45              2
  D       3         150             3

我不想像原始问题中列出的那样对累积总和进行分组,而是想按“团队和比赛”进行分组,因此步骤更小。

Team_1_CumSum | Team_2_CumSum | Team_3_CumSum | Team_4_CumSum | Match
     50              75               0               0           1
     95              75              40               0           2
     95              75             190               0           3

基本上,每场比赛一行。

解决方法

尝试一下:

df['Cum Score'] = df.groupby('Team')['Total_Points'].cumsum()

df_chart = df.set_index('Team',append=True)['Cum Score'].unstack().ffill().fillna(0)
df_chart.columns='Team_'+df_chart.columns.astype(str)+'_CumSum'
df_chart = df_chart.reindex([f'Team_{i}_CumSum' for i in range(1,5)],axis=1,fill_value=0)
print(df_chart)

输出:

Team  Team_1_CumSum  Team_2_CumSum  Team_3_CumSum  Team_4_CumSum
0              50.0            0.0            0.0              0
1              50.0           75.0            0.0              0
2              50.0           75.0           40.0              0
3              95.0           75.0           40.0              0
4              95.0           75.0          190.0              0

然后看看使用(https://pypi.org/project/bar-chart-race/)。

import matplotlib.pyplot as plt
import bar_chart_race as bcr
bcr.bar_chart_race(df_chart,'Teams.mp4',steps_per_period=5)

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。