有没有什么方法可以将非条件和条件分组后的数据聚合起来?
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
答案 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())
)