我想将两个数据帧df1,df2连接到一个新的数据帧,如果重复的索引/列中的值同时存在于df1和df2中,则将它们分配为NA
,但是考虑到的实际值应仅存在于一个值中:
df1:
A B C
X NA 1 2 #Note: (X,B) also in df2
Y 3 2 NA #Note: (Y,B) also in df2
Z NA NA 4
df2:
A B F
X -1 -1 NA #Note: (X,A) not in df1
Y NA -3 -4 #Note: (Y,A) not in df1
W NA -3 -4
输出:
A B C F
X -1 NA 2 NA
Y 3 NA NA -4
Z NA NA 4 NA
W NA -3 NA -4
我认为类似
pd.concat([df1,df2], axis=1)
的方法应该起作用,但是我不知道如何为具有值的索引/列设置特殊条件。先感谢您
最佳答案
您可以使用combine_first
,然后将NaN
替换为mask
-mask
由notnull
和&
创建,NaN
被False
替换为fillna
:
mask = (df1.notnull() & df2.notnull()).fillna(False)
print (mask)
A B C F
W False False False False
X False True False False
Y False True False False
Z False False False False
#if necessary change order of index values add reindex
df = df1.combine_first(df2).reindex(['X','Y','Z', 'W'])
print (df)
A B C F
X -1.0 1.0 2.0 NaN
Y 3.0 2.0 NaN -4.0
Z NaN NaN 4.0 NaN
W NaN -3.0 NaN -4.0
print (df.mask(mask))
A B C F
X -1.0 NaN 2.0 NaN
Y 3.0 NaN NaN -4.0
Z NaN NaN 4.0 NaN
W NaN -3.0 NaN -4.0
关于python - 合并数据框并忽略(选择性地)Pandas中的重复索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42691499/