我正在尝试对 pandas df 中的特定列执行 groupby sum。但我只想在某个阈值之后执行 count 。对于本示例,它将位于
B > 2
。
groupby 在 A 上,count 在 C 上。正确的输出应该是:
x = 3
y = 9
df = pd.DataFrame(dict(A=list('ababaa'), B=[1, 1, 3, 4, 5, 6], C=[9, 9, 0, 9, 1, 2]))
df.loc[(df['B'] > 2), 'Count'] = df.groupby('A')['C'].transform('sum')
df['Count'] = df['Count'].replace(np.NaN, 0).astype(int)
出:
A B C Count
0 x 1 9 0
1 y 1 9 0
2 x 3 0 12 *3
3 y 4 9 18 *9
4 x 5 1 12 *3
5 x 6 2 12 *3
用途:
m = df['B'] > 2
df.loc[m, 'Count'] = df[m].groupby('A')['C'].transform('sum')
df['Count'] = df['Count'].replace(np.NaN, 0).astype(int)
print (df)
A B C Count
0 a 1 9 0
1 b 1 9 0
2 a 3 0 3
3 b 4 9 9
4 a 5 1 3
5 a 6 2 3