汇总和汇总熊猫数据框中的数据。有没有更好的办法?

时间:2018-12-31 05:33:19

标签: python pandas numpy matplotlib seaborn

我有一个曲棍球统计数据框,其中包含球员,位置,进球得分等(存储在名为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函数吗?我可以直接从原始数据框中获得这些可视化吗? enter image description here

1 个答案:

答案 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])