如何在Python中实现Excel嵌套IF公式并应用于DataFrame
所需库
只需要pandas(搭配numpy可提升逻辑判断效率,numpy通常随pandas默认安装)
实现步骤与代码
先拆解Excel嵌套IF公式的逻辑:
- 当AD2、AE2、AF2、AG2均为"0"时,结果为"000-000"
- 若上述条件不成立,且AE2、AF2、AG2均为"0",结果取AD列第一行的值(对应Excel的$AD$1)
- 若上述条件不成立,且AF2、AG2均为"0",结果取AE列第一行的值(对应Excel的$AE$1)
- 若上述条件不成立,且AG2为"0",结果取AF列第一行的值(对应Excel的$AF$1)
- 其他情况,结果取AG2的值
代码示例
import pandas as pd import numpy as np # 初始化目标DataFrame data = pd.DataFrame({ 'AD2': ['0', '0', '163', '256'], 'AE2': ['0', '0', '163', '236'], 'AF2': ['0', '0', '163', '236'], 'AG2': ['0', '139', '0', '415'] }) # 提取各列第一行的固定值(对应Excel中的绝对引用$AD$1、$AE$1等) ad1 = data['AD2'].iloc[0] ae1 = data['AE2'].iloc[0] af1 = data['AF2'].iloc[0] # 定义条件列表与对应结果列表 conditions = [ (data['AD2'] == '0') & (data['AE2'] == '0') & (data['AF2'] == '0') & (data['AG2'] == '0'), (data['AE2'] == '0') & (data['AF2'] == '0') & (data['AG2'] == '0'), (data['AF2'] == '0') & (data['AG2'] == '0'), data['AG2'] == '0' ] results = [ '000-000', ad1, ae1, af1 ] # 应用逻辑生成新列,default对应公式最后一个ELSE分支 data['Result'] = np.select(conditions, results, default=data['AG2']) print(data)
运行结果
AD2 AE2 AF2 AG2 Result 0 0 0 0 0 000-000 1 0 0 0 139 139 2 163 163 163 0 0 3 256 236 236 415 415
说明
np.select比apply效率更高,适合处理大规模数据集- 因原始DataFrame中值为字符串类型,判断时用
== '0';若为数值类型,改为== 0即可 - 通过
iloc[0]提取列首值,完美对应Excel中的绝对引用逻辑
内容的提问来源于stack exchange,提问作者Alfin Edo
相关产品推荐
相关产品推荐

