pandas groupby 聚合计数条件

pandas groupby agg count when condition

有没有办法在非条件和条件分组后聚合数据?

df.groupby(["GRP_1", "GRP_2", "GRP_3"], as_index=False).agg(P_cnt = (num_str, 'count'),
                                                            C_cnts = (C_cnt, 'sum'),
                                                            C_cnts_positive = (C_cnt>=0, 'sum'))
df.dtypes
GRP_1     object
GRP_2     object
GRP_3     object
num_str   object
C_cnt     float64

不,您需要为 C_cnt>=0 创建一个新列。例如:

(df.assign(pos_C_cnts=df['C_cnt'].clip(0))
   .groupby(["GRP_1", "GRP_2", "GRP_3"], as_index=False)
   .agg(P_cnt=('num_str', 'count'),             # column name need be strings
        C_cnts=('C_cnt', 'sum'),                # 'sum' not 'Sum'
        C_cnts_positive=('pos_C_cnts', 'sum'))
)

或使用lambda函数(会慢一点)

(df.groupby(["GRP_1", "GRP_2", "GRP_3"], as_index=False)
   .agg(P_cnt=('num_str', 'count'),
        C_cnts=('C_cnt', 'sum'),
        C_cnts_positive=('C_cnt', lambda x: x.clip(0).sum())
)