按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
相关产品推荐
相关产品推荐

