如何对两个Pandas DataFrame执行逻辑OR运算得到预期结果
解决Pandas两个DataFrame逻辑OR运算非公共列返回NaN的问题
问题根因
直接对列不一致的DataFrame使用|运算符做逻辑或运算时,pandas会先自动对齐双方的行索引和列名,仅在双方均存在的位置执行运算,仅单侧存在的位置默认填充NaN,而NaN参与逻辑或运算的结果仍为NaN,因此会出现非公共列结果为NaN的问题。
可行解决方法
方法1:先对齐DataFrame填充0再运算
先通过align方法把两个DataFrame的行列补全,缺失位置填充0,再执行逻辑或运算:
import pandas as pd df1 = pd.DataFrame.from_dict([{'call_id':'aa','486':0,'487':1}]) df2 = pd.DataFrame.from_dict([{'call_id':'aa','503':1,'487':1}]) df1 = df1.set_index('call_id') df2 = df2.set_index('call_id') # 对齐行列,缺失值填充0 df1_aligned, df2_aligned = df1.align(df2, fill_value=0) df3 = df1_aligned | df2_aligned
方法2:使用combine方法指定运算规则
直接调用combine方法,指定运算逻辑的同时设置缺失值填充为0:
df3 = df1.combine(df2, lambda s1, s2: s1 | s2, fill_value=0)
两种方法运行后得到的df3均符合预期结果:
486 487 503 call_id aa 0 1 1
内容的提问来源于stack exchange,提问作者harp1814
相关产品推荐
相关产品推荐

