假设正在进行多场足球比赛。当球队失去控球权时会生成一个数据点,并且控球时间被记录在一个文本文件中,如下所示:'Game','Country','Team','Ball Possession Interval (sec)' 1,Croatia,A,92,France,B,111,Croatia,A,84,Spain,C,101,Croatia,B,62,France,B,73,Germany,C,122,France,A,8...游戏是一个团队迄今为止玩的游戏数量。例如,2,France,B,7意味着来自法国的 B 队,现在是他们的第 2 场比赛,在 7 秒后刚刚失去控球权。我想要一个按国家分组的图(每个国家的子图),沿轴有球队,以及每支球队每场比赛的“控球间隔(秒)”总和的箱线图。我尝试了以下,df.groupby('Country').boxplot(by='Team',column=*vector of sum of ball possession intervals per game*)但我不知道将列设置为什么。我希望我可以将其设置为以下内容,df.groupby(['Country','Team','Game'])['Ball Possession Interval (sec)'].sum()但它不起作用。有没有一种简单的方法可以做到这一点?
2 回答
慕标琳琳
TA贡献1830条经验 获得超9个赞
我已经使用pivot_table了解了我想要的解决方案:
plotdf = df.pivot_table(index=['Country','Team','Game'], values='Ball Possession Interval (sec)', aggfunc=np.sum)
从 pivot_table 的文档中,values是要聚合的列,aggfunc是聚合方法。现在进行分组箱线图...
plotdf.groupby('Country').boxplot(by='Team', column='Ball Possession Interval (sec)')
这是有效的,因为 pivot_table 返回一个适合 boxplot 的数据框对象。
以下不起作用的原因是因为它返回了一个不适合 boxplot, 的系列df.groupby(['Country','Team','Game'])['Ball Possession Interval (sec)'].sum()
。
添加回答
举报
0/150
提交
取消