[英]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.