如何在Pandas中实现指定Excel嵌套IF公式生成新列?
解决方法
你的需求可以拆解为两步逻辑:优先从当前行的指定列取值,无匹配时继承上一行结果。直接用ffill()无法满足是因为缺少了先根据条件筛选当前行有效值的步骤,以下是具体实现代码:
import pandas as pd import numpy as np # 定义触发条件和对应的取值列 conditions = [ df['P'] == 'Organisation', df['R'] == 'Organisation', df['T'] == 'Organisation', df['V'] == 'Organisation', df['X'] == 'Organisation', df['Z'] == 'Organisation', df['AB'] == 'Organisation' ] values = [ df['O'], df['Q'], df['S'], df['U'], df['W'], df['Y'], df['AA'] ] # 第一步:根据条件生成初始列,未匹配的行设为NaN df['AI'] = np.select(conditions, values, default=np.nan) # 第二步:对未匹配的行向前填充,继承上一行的结果 df['AI'] = df['AI'].ffill()
补充说明
np.select()会按顺序匹配条件,一旦某行满足第一个条件,就会取对应的值,和Excel中IF嵌套的逻辑完全一致- 如果第一行没有任何触发条件,
ffill()后会保留NaN,你可以根据实际需求添加fillna()设置默认值,比如:df['AI'] = df['AI'].ffill().fillna('默认值')
内容的提问来源于stack exchange,提问作者luff1992
相关产品推荐
相关产品推荐

