【问题标题】:sum the values of a group by object按对象对组的值求和
【发布时间】:2019-09-17 13:05:01
【问题描述】:

我遇到了一些 pandas groupby 对象问题,具体如下:

所以我有这个数据框:

  Letter name    num_exercises
    A       carl        1 
    A       Lenna       2 
    A       Harry       3         
    A       Joe         4  
    B       Carl        5    
    B       Lenna       3   
    B       Harry       3  
    B       Joe         6 
    C       Carl        6
    C       Lenna       3 
    C       Harry       4  
    C       Joe         7  

我想在上面添加一个名为 num_exercises_total 的列,其中包含每个字母的 num_exercises 的总和。请注意,该值必须在字母组中的每一行重复。

输出如下:

Letter name    num_exercises   num_exercises_total
A       carl        1                 15
A       Lenna       2                 15
A       Harry       3                 15
A       Joe         4                 15
B       Carl        5                 18
B       Lenna       3                 18
B       Harry       3                 18
B       Joe         6                 18
C       Carl        6                 20
C       Lenna       3                 20
C       Harry       4                 20
C       Joe         7                 20

我试过像这样添加新列:

df['num_exercises_total'] = df.groupby(['letter'])['num_exercises'].sum()

但它为所有行返回值NaN

任何帮助将不胜感激。

非常感谢您!

【问题讨论】:

标签: python pandas sum


【解决方案1】:

您可能需要检查transform

df.groupby(['Letter'])['num_exercises'].transform('sum')
0     10
1     10
2     10
3     10
4     17
5     17
6     17
7     17
8     20
9     20
10    20
11    20
Name: num_exercises, dtype: int64

df['num_of_total']=df.groupby(['Letter'])['num_exercises'].transform('sum')

【讨论】:

    【解决方案2】:

    Transform 非常适合这个问题。 WenYoBen 是对的。我只是在这里放稍微不同的版本。

    df['num_of_total']=df['num_excercises'].groupby(df['Letter']).transform('sum')
    >>> df
       Letter   name  num_excercises  num_of_total
    0       A   carl               1            10
    1       A  Lenna               2            10
    2       A  Harry               3            10
    3       A    Joe               4            10
    4       B   Carl               5            17
    5       B  Lenna               3            17
    6       B  Harry               3            17
    7       B    Joe               6            17
    8       C   Carl               6            20
    9       C  Lenna               3            20
    10      C  Harry               4            20
    11      C    Joe               7            20
    

    【讨论】:

      猜你喜欢
      • 2015-11-28
      • 2016-09-05
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      相关资源
      最近更新 更多