我有一个曲棍球统计数据框,其中包含球员,位置,进球得分等(存储在名为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']);
因此,我按位置对原始数据框da进行了分组,得到了目标和助攻的总和,然后放下了守门员并列了一个得分列。使用melt之后,我有两个可行的数据框,并使用seaborn进行了绘制。
我的主要问题是有更好的方法吗?我觉得简单地找到总目标等工作很多。我必须使用groupby函数吗?我可以直接从原始数据框中获得这些可视化吗?
答案 0 :(得分:0)
为使事情更简洁,您可以使用熊猫自己的绘图功能。您不必先融化数据集,也不必重置索引。这是您可以在几行中完成的示例:
df_no_GK = df[df['Pos'] != 'GK']
group = df_no_GK.groupby(['Pos'])['G', 'A'].sum()
fig, ax = plt.subplots(1, 2)
group.plot(kind='bar', ax=ax[0])
group.sum().plot(kind='bar', ax=ax[1])