我可能无法完全理解pandas.DataFrame.merge
的所有论据所做的事情,但我想知道我之后的一个简单例子:
df1 = pd.DataFrame({'a':range(0,100), 'b':np.linspace(0,10,100)})
df2 = pd.DataFrame({'a':range(1,101), 'b':np.linspace(0.1,10.1,100)})
# Additionally both the above have some other irrelevant columns
# which don't share the same name
df = df1.merge(df2, on='a', how='outer')
列'a'
是一个整数,我们希望实际融合。但是,由于两个DataFrame中都存在'b'
,因此结果会将其复制到'b_x'
和'b_y'
中。是否有任何简单的选项来防止这种情况?我想要的是df
有一个'b'
列,如果df1
中存在该行,则会从df1
获取其值,但来自{df2
1}}在df2
中没有出现的情况下。
我想要的原因是在'b'
可能是浮动的情况下,并且我希望它们在两个数据帧中基本上相同,但我可能不会能保证我有确切的浮点相等。
我想可以使用布尔索引完成,首先与how='left'
合并,然后填写其余索引:
df = df1.merge(df2['a',...], on='a', how='left')
df[df.a.isin(df1.a)]['b'] = df1.b
df[~df.a.isin(df1.a)]['b'] = df2.b
但可以使用pd.merge
中的任何参数直接执行上述操作。