Skip to main content
 首页 » 编程设计

python之有条件的 pandas groupby

2025年05月04日15myhome

我有这个:

IDS    CR_EARNED    TYPE    TOT_ALL_TYPES 
001       3          A          7 
001       3          A          7 
001       1          B          7 
002       3          A          6 
002       3          A          6 
003       2          C          8 
003       4          C          8 
003       2          A          8 

TOT_ALL_TYPES 是我创建的一个列,用于通过执行以下操作对每个 ID 的 CR_EARNED 的所有 TYPE 求和:

df['TOT_ALL_TYPES'] = df['CR_EARNED'].groupby(df['IDS']).transform('sum') 

接下来,我想创建一个新列,它将按 ID 对 CR_EARNED 求和,其中 TYPE = A 或 B。结果如下所示:

IDS    CR_EARNED    TYPE    TOT_ALL_TYPES    TOT_AB 
001       3          A          7               7 
001       3          A          7               7 
001       1          B          7               7 
002       3          C          6               3 
002       3          A          6               3 
003       2          C          8               2 
003       4          C          8               2 
003       2          A          8               2 

我该怎么做?

请您参考如下方法:

国际联合会

你可以使用where

df['CR_EARNED'].where(df.TYPE.isin(['A','B']),0).groupby(df['IDS']).transform('sum') 
Out[887]:  
0    7 
1    7 
2    7 
3    6 
4    6 
5    2 
6    2 
7    2 
Name: CR_EARNED, dtype: int64 

更多信息

df['CR_EARNED'].where(df.TYPE.isin(['A','B']),0) 
Out[890]:  
0    3 
1    3 
2    1 
3    3 
4    3 
5    0 
6    0 
7    2 
Name: CR_EARNED, dtype: int64