You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:55:25