繁体   English   中英

条件时的 pandas groupby agg 计数

[英]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 function (会慢一点)

(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())
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM