首页 > 解决方案 > 两个数据帧的逻辑“或”

问题描述

我想对两个数据帧进行逻辑“或”:

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')   
df3 = df1 | df2

结果是:

         486  487  503
call_id               
aa       NaN    1  NaN

但希望的结果是:

         486  487  503
call_id               
aa       0    1    1

我怎样才能得到它?

标签: pandasdataframe

解决方案


用于Index.union所有可能的列并传递给DataFrame.reindex两个 DataFrame 中相同的列名称:

cols = df1.columns.union(df2.columns)
df3 = df1.reindex(cols, axis=1, fill_value=0) | df2.reindex(cols, axis=1, fill_value=0) 

print (df3)
         486  487  503
call_id               
aa         0    1    1

开箱即用的解决方案DataFrame.add,但随后需要将更大的转换11

df3 = df1.add(df2, fill_value=0).gt(1).astype(int)
#alternative
#df3 = df1.add(df2, fill_value=0).clip(upper=1).astype(int)

print (df3)
         486  487  503
call_id               
aa         0    1    1

推荐阅读