如何在Pandas中根据D列条件用对应E值计算填充新列F?
解决方案
核心思路
按C列分组处理:
- 对
C3分组,直接将F列填充为nan - 对
C1、C2分组,先定位该组内D=1对应的E值,再用该值乘以组内所有D列值得到F列
完整代码示例
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({ 'C': ['C1', 'C1', 'C1', 'C2', 'C2', 'C3', 'C3'], 'D': [0.5, 1, 0.8, 0.3, 1, 0.6, 0.7], 'E': [np.nan, 2.4, np.nan, np.nan, 3.1, np.nan, np.nan] }) # 定义分组处理函数 def process_group(group): group_name = group['C'].iloc[0] if group_name == 'C3': group['F'] = np.nan else: # 获取当前分组中D=1对应的E值 e_value = group.loc[group['D'] == 1, 'E'].iloc[0] # 计算F列 group['F'] = group['D'] * e_value return group # 应用分组处理 df = df.groupby('C', group_keys=False).apply(process_group) print(df)
输出结果
C D E F 0 C1 0.5 NaN 1.20 1 C1 1.0 2.4 2.40 2 C1 0.8 NaN 1.92 3 C2 0.3 NaN 0.93 4 C2 1.0 3.1 3.10 5 C3 0.6 NaN NaN 6 C3 0.7 NaN NaN
原代码问题分析
你之前的代码存在两个关键问题:
- 未按
C列分组处理,无法针对C1/C2和C3分别执行逻辑 - 切片操作(
[:-2])和索引引用逻辑混乱,没有精准定位到每个分组内的D=1对应的E值,导致计算逻辑不符合需求
内容的提问来源于stack exchange,提问作者zhhJll
相关产品推荐
相关产品推荐

