You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pandas DataFrame列间应用OR条件的实现方法

解决DataFrame生成布尔列:匹配指定列取值集合的问题

首先得指出你代码里的一个小细节问题:你的truth_list里bank_df['Overdraft'].isin(['Yes'])和原数据不匹配——原数据的Overdraft列取值是'Y'/'N',不是'Yes',这个得先修正,不然这个条件永远返回False哦。

接下来,你提到想用apply()+any(),其实完全不需要这么麻烦,Pandas的向量化操作就能高效解决这个问题,而且比逐行apply快得多,尤其是处理大数据量的时候。

方法一:向量化布尔运算(推荐)

先创建示例DataFrame:

import pandas as pd

bank_dict = {'Name' : ['A', 'B', 'C', 'D', 'E'], 
             'Type' : ['Retail', 'Corporate', 'Corporate', 'Wholesale', 'Retail'], 
             'Overdraft': ['Y', 'Y', 'Y', 'N', 'N'], 
             'Forex': ['USD', 'GBP', 'EUR', 'JPY', 'GBP']}
bank_df = pd.DataFrame(bank_dict)

然后修正并定义你的条件列表,再用逻辑运算符组合:

from functools import reduce

# 修正Overdraft的取值,同时定义三个条件
truth_conditions = [
    bank_df['Type'].isin(['Retail']),
    bank_df['Overdraft'].isin(['Y']),  # 改为和数据匹配的'Y'
    bank_df['Forex'].isin(['USD', 'GBP'])
]

# 如果你想要"满足任意一个条件就为True"(对应any()的效果),用逻辑或|组合
bank_df['TruthCol'] = reduce(lambda x, y: x | y, truth_conditions)

# 如果你想要"满足所有条件才为True"(对应all()的效果),用逻辑与&组合
# bank_df['TruthCol'] = reduce(lambda x, y: x & y, truth_conditions)

运行后得到的结果(以"任意条件满足"为例):

NameTypeOverdraftForexTruthCol
ARetailYUSDTrue
BCorporateYGBPTrue
CCorporateYEURTrue
DWholesaleNJPYFalse
ERetailNGBPTrue

方法二:用apply()实现(不推荐,效率低)

如果你坚持想用apply+any的思路,也可以这么写,本质是逐行判断:

def check_row_conditions(row):
    # 定义每行的三个判断条件
    conditions = [
        row['Type'] in ['Retail'],
        row['Overdraft'] in ['Y'],
        row['Forex'] in ['USD', 'GBP']
    ]
    # any()表示任意一个条件满足就返回True,换成all()就是所有条件满足才返回True
    return any(conditions)

bank_df['TruthCol'] = bank_df.apply(check_row_conditions, axis=1)

为什么不推荐这个方法?因为apply(axis=1)是逐行遍历处理,当你的DataFrame有几万甚至几十万行的时候,速度会比向量化操作慢很多,所以优先用第一种方法。

内容的提问来源于stack exchange,提问作者shanlodh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:42:56