【问题标题】:Aggregating and summing data in pandas dataframe. Is there a better way?在 pandas 数据框中聚合和汇总数据。有没有更好的办法?
【发布时间】: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


【解决方案1】:

为了使事情更简洁,您可以使用 pandas 自己的绘图功能。然后您不必融化数据集或重置索引。以下是您只需几行代码即可完成的示例:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 2016-06-18
    • 2020-05-07
    • 2019-09-24
    • 2020-12-06
    • 2021-12-03
    • 1970-01-01
    • 2018-07-24
    相关资源
    最近更新 更多