如何解决为条形图竞赛转换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
此后,我将参加条形图竞赛。
有关如何操作的任何想法
- 进行转化
- 之后的条形图比赛
对于转换,我尝试了:
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。