如何基于col1和col2重复值计算对应col3的求和列sum_prog
解决方案
首先明确你的需求规则:
- 当同一个
col2(用户ID)下,某个col1(程序名)重复出现多次时,sum_prog取该程序对应col3的总和; - 当同一个
col2下,col1仅出现一次时,无论col3的值是0还是1,sum_prog都设为1。
你之前用groupby没得到预期结果,应该是没加入「重复次数判断」的逻辑。下面是实现代码:
代码实现
import pandas as pd # 构造原DataFrame data = { 'col1': ['prog1', 'prog2', 'prog2', 'prog1', 'prog3', 'prog4', 'prog2', 'prog5', 'prog5', 'prog3'], 'col2': ['id001', 'id001', 'id001', 'id002', 'id002', 'id002', 'id003', 'id003', 'id003', 'id004'], 'col3': [1, 0, 1, 0, 0, 1, 0, 1, 1, 1] } df = pd.DataFrame(data) # 按(col2, col1)分组,计算每组的出现次数和col3总和 group_stats = df.groupby(['col2', 'col1']).agg( prog_count=('col3', 'count'), col3_total=('col3', 'sum') ).reset_index() # 合并统计结果到原DataFrame df = df.merge(group_stats, on=['col2', 'col1'], how='left') # 根据规则生成sum_prog列 df['sum_prog'] = df.apply(lambda row: row['col3_total'] if row['prog_count'] > 1 else 1, axis=1) # 可选:删除中间统计列 df = df.drop(columns=['prog_count', 'col3_total']) print(df)
输出结果
col1 col2 col3 sum_prog 0 prog1 id001 1 1 1 prog2 id001 0 1 2 prog2 id001 1 1 3 prog1 id002 0 1 4 prog3 id002 0 1 5 prog4 id002 1 1 6 prog2 id003 0 1 7 prog5 id003 1 2 8 prog5 id003 1 2 9 prog3 id004 1 1
该结果完全匹配你给出的目标示例。
内容的提问来源于stack exchange,提问作者Khaled DELLAL
相关产品推荐
相关产品推荐

