为条形图竞赛转换数据帧

2024-10-03 02:37:24 发布

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

我有一个如下形式的数据框:

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

基本上,每场比赛一排


Tags: 数据dfmatch步骤团队team形式points
1条回答
网友
1楼 · 发布于 2024-10-03 02:37:24

试试这个:

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

相关问题 更多 >