如何使用df.apply根据Decide列取值跨列匹配生成Result新列
基于
df.apply实现跨列条件取值的方案 实现逻辑:给df.apply传入axis=1参数时,方法会逐行遍历数据框,将每一行封装为行级Series传入自定义处理函数,函数内部可直接通过列名读取当前行任意字段的值,天然支持跨列动态取值需求,适配描述的场景。
完整可运行代码
import numpy as np import pandas as pd # 复现示例初始化数据 np.random.seed(0) df_H = pd.DataFrame( {'L0': np.random.randn(100), 'OneAndZero': np.random.randn(100), 'OneAndTwo': np.random.randn(100), 'GTwo': np.random.randn(100), 'Decide': np.random.randn(100)}) # 定义逐行判断取值的处理函数 def calc_row_result(row): decide_value = row['Decide'] # 匹配给定的判断规则 if decide_value < 0: return row['L0'] elif 0 <= decide_value < 1: return row['OneAndZero'] elif 1 <= decide_value < 2: return row['OneAndTwo'] else: return row['GTwo'] # 逐行应用逻辑生成Result列 df_H['Result'] = df_H.apply(calc_row_result, axis=1)
关键注意点
- 必须显式指定
axis=1,如果使用默认的axis=0,apply会逐列把整列数据传入函数,无法实现逐行判断逻辑 - 自定义函数的入参
row就是当前行的全量数据,直接通过列名索引即可拿到对应字段值,不需要额外传参 - 编写判断条件时要对齐区间边界:Decide等于0时归到0-1区间、等于1时归到1-2区间、等于2时归到大于2的区间,避免条件写反导致边界值取值错误
- 100行规模的数据下该方法运行无压力,逻辑直观易调试;如果后续处理十万行以上的大规模数据,可以替换为向量化的条件拼接方案,性能更优。
内容的提问来源于stack exchange,提问作者Snowflake
相关产品推荐
相关产品推荐

