基于DataFrame列条件计算新增列F的Python实现求助
问题解决:基于DataFrame特定行的值批量计算新列F
需求说明
给现有DataFrame新增一列F,规则如下:
- 找到D列值等于1的行,提取该行对应的E列值(示例中为2.4)
- 所有行的F列值 = 对应行的D列值 × 上述提取到的E值
- 若D列为无效值(示例中的
-),则F列为nan
示例DataFrame:
A B C D E F --- --- --- --- --- --- C1 b1 10.2 1.34 0 1.34*2.4 C1 b2 11.2 0.78 0 0.78*2.4 C1 b3 13.12 1.02 0 1.02*2.4 C2 b4 11.90 0.89 0 0.89*2.4 C2 b5 12.33 1 2.4 1*2.4 C3 b6 43.90 - 3.2 nan
你尝试的代码存在索引范围错误和逻辑漏洞:
g["F"][:-2] = np.where(g["D"][-2:] == 1, g["D"][:-2]*G["E])
解决方案
步骤1:预处理D列,提取目标E值
先将D列的无效值转为数值型NaN,再定位D=1的行获取对应的E值:
import pandas as pd # 处理D列的非数值内容,转为NaN g['D'] = pd.to_numeric(g['D'], errors='coerce') # 提取D=1对应的E值(假设仅存在一行D=1,多行可根据需求调整逻辑) target_e = g.loc[g['D'] == 1, 'E'].iloc[0]
步骤2:计算生成F列
直接用D列乘以目标E值,NaN会自动传递到F列:
g['F'] = g['D'] * target_e
完整代码示例
import pandas as pd # 构造示例DataFrame data = { 'A': ['C1', 'C1', 'C1', 'C2', 'C2', 'C3'], 'B': ['b1', 'b2', 'b3', 'b4', 'b5', 'b6'], 'C': [10.2, 11.2, 13.12, 11.90, 12.33, 43.90], 'D': [1.34, 0.78, 1.02, 0.89, 1, '-'], 'E': [0, 0, 0, 0, 2.4, 3.2] } g = pd.DataFrame(data) # 预处理D列 g['D'] = pd.to_numeric(g['D'], errors='coerce') # 获取目标E值 target_e = g.loc[g['D'] == 1, 'E'].iloc[0] # 计算F列 g['F'] = g['D'] * target_e print(g)
输出结果
A B C D E F 0 C1 b1 10.20 1.34 0.0 3.216 1 C1 b2 11.20 0.78 0.0 1.872 2 C1 b3 13.12 1.02 0.0 2.448 3 C2 b4 11.90 0.89 0.0 2.136 4 C2 b5 12.33 1.00 2.4 2.400 5 C3 b6 43.90 NaN 3.2 NaN
补充说明
- 若DataFrame中存在多行D=1,可根据需求调整
target_e的获取逻辑,比如取平均值:target_e = g.loc[g['D'] == 1, 'E'].mean() - 代码通过
pd.to_numeric统一处理D列的非数值内容,确保后续计算逻辑的一致性
内容的提问来源于stack exchange,提问作者zhhJll
相关产品推荐
相关产品推荐

