如何对含字符串值的两个Pandas DataFrame执行逻辑OR运算
解决方案
你需要的自定义混合类型逻辑OR运算,无法直接用pandas原生|运算符实现(该运算符仅支持布尔/数值运算,无法处理字符串和空值场景),按以下方式实现即可:
完整实现代码
import pandas as pd # 原有初始化逻辑 df1 = pd.DataFrame.from_dict([{'call_id':'aa','486':'2021-09-01','487':0}]) df2 = pd.DataFrame.from_dict([{'call_id':'aa','503':1,'487':1}]) df1 = df1.set_index('call_id') df2 = df2.set_index('call_id') # 自定义OR逻辑函数 def custom_or(x, y): if pd.isna(x): return y if pd.isna(y): return x return x if bool(x) else y # 执行合并运算 df3 = df1.combine(df2, custom_or)
逻辑说明
代码完全匹配你提出的运算规则:
- 字段仅在单个DataFrame中存在时,空值侧直接返回另一侧的非空值
- 双侧都有值时遵循逻辑OR判定规则:非空字符串、1的布尔结果为真,0的布尔结果为假,优先返回真值,刚好满足0和1运算输出1、字符串原样保留的要求。
运行后输出的df3和你期望的结果完全一致。
内容的提问来源于stack exchange,提问作者harp1814
相关产品推荐
相关产品推荐

