我想将两个数据帧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-masknotnull&创建,NaNFalse替换为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/

10-13 06:14