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

按column_a分组替换Pandas DataFrame中type1行的column_c值方法

Pandas 分组条件替换列值实现方案

我们可以通过分组校验+值映射的逻辑完成需求,具体实现如下:

  • 第一步:按column_a分组,判断每个分组是否同时包含column_b为type2和type3的记录,筛选出符合条件的column_a取值
  • 第二步:对符合条件的分组,计算同组内type2和type3对应的column_c值之和
  • 第三步:定位同组内column_b为type1的行,将其column_c值替换为上面计算的总和

完整可运行代码示例:

import pandas as pd

# 构造示例测试数据,可替换为自己的DataFrame
df = pd.DataFrame({
    'column_a': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'],
    'column_b': ['type1', 'type2', 'type3', 'type1', 'type2', 'type1', 'type2', 'type3'],
    'column_c': [10, 20, 30, 40, 50, 60, 70, 80]
})

# 核心处理逻辑
# 1. 筛选同时存在type2和type3的column_a分组
valid_groups = df.groupby('column_a')['column_b'].apply(
    lambda x: {'type2', 'type3'}.issubset(set(x))
).reset_index(name='is_valid')
valid_a_list = valid_groups[valid_groups['is_valid']]['column_a'].tolist()

# 2. 计算符合条件的分组中type2+type3的column_c总和
sum_mapping = df[
    (df['column_b'].isin(['type2', 'type3'])) & 
    (df['column_a'].isin(valid_a_list))
].groupby('column_a')['column_c'].sum().to_dict()

# 3. 替换type1行的column_c值
df.loc[
    (df['column_a'].isin(valid_a_list)) & 
    (df['column_b'] == 'type1'), 
    'column_c'
] = df['column_a'].map(sum_mapping)

示例运行效果:A组、C组同时存在type2和type3,因此A组type1的column_c将被替换为20+30=50,C组type1的column_c将被替换为70+80=150;B组不存在type3不符合条件,对应type1的column_c保持原值40不变。

内容的提问来源于stack exchange,提问作者Raúl Casado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:27:03