【发布时间】:2019-05-27 18:41:42
【问题描述】:
我有一个曲棍球统计数据框,包括球员、位置、进球等(存储在名为 da 的变量中)
Session Title PLAYER STARTER Number G A SH SOG GB DC T/O CT Pos
0 Opponent 1 Player1 False 1 0 0 0 0 0 0 0 0 M
1 Opponent 2 Player1 False 1 0 0 0 0 1 0 0 0 M
2 Opponent 3 Player1 False 1 0 0 0 0 0 1 0 0 M
3 Opponent 4 Player1 False 1 0 0 0 0 0 0 0 0 M
4 Opponent 5 Player1 False 1 0 0 0 0 1 0 0 0 M
我想看看哪些位置的得分、进球和助攻最多(积分就是进球数 + 助攻数)
我想出了以下内容:
poses = da.groupby(['Pos'])[['G','A']].sum()
poses = poses.drop(['GK'], axis = 0)
pose = poses.reset_index()
pose['Pts'] = pose['G']+pose['A']
opose = pd.melt(pose, id_vars='Pos', value_vars=['G', 'A'],
var_name='G/A', value_name='Count')
#display(opose)
dims = (15, 11)
fig, ax = plt.subplots(figsize=dims)
plt.subplot(121)
sns.barplot(x=opose['Pos'], y=opose['Count'], hue=opose['G/A'])
plt.subplot(122)
sns.barplot(x=pose['Pos'], y=pose['Pts']);
所以我将原始数据框按位置分组,得到进球和助攻的总和,然后去掉守门员并制作一个积分列。使用melt 后,我有两个可行的数据框,并使用seaborn 绘制了每个数据框。
我的主要问题是有没有更好的方法来做到这一点?我觉得简单地找到总目标等工作量很大。我必须使用 groupby 功能吗?我可以更直接地从原始数据框中获得这些可视化吗?
【问题讨论】:
-
da.groupby(['Pos'])[['G','A']].sum()工作量很大吗?这对我来说非常简洁,尤其是当你考虑到当你拥有数千个组和数十万行时它的效率时
标签: python pandas numpy matplotlib seaborn