合并两个pandas数据帧,如何避免重复使用相同名称的轴

时间:2018-02-14 14:02:55

标签: python pandas dataframe

我可能无法完全理解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中的任何参数直接执行上述操作。

0 个答案:

没有答案