我遇到一些熊猫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
。
任何帮助将不胜感激。
非常感谢您!
答案 0 :(得分:4)
您可能要检查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')
答案 1 :(得分:0)
转换非常适合此问题。 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