条件下的熊猫分组聚合计数

时间:2021-05-05 19:23:26

标签: python pandas data-manipulation

有没有什么方法可以将非条件和条件分组后的数据聚合起来?

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

1 个答案:

答案 0 :(得分:3)

不,您需要为 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())
)