我遇到了一个问题,并且找到了一个解决方案,但我觉得这不是最佳的方法。可能有更“规范”的方法来做这件事。
问题
我有两个数据框,我想将它们合并,但不希望增加额外的列,也不希望删除现有的信息。例如:
现有数据框 (df)
A A2 B0 1 4 01 2 5 1
要合并的数据框 (df2)
A A2 B0 1 4 21 3 5 2
如果’A’和’A2’列匹配,我希望用df2
更新df
。结果会是这样的:
A A2 B0 1 4 2.0 <= 只更新这个值1 2 5 1.0
这是我的解决方案,但我认为这不是一个很好的方法。
import pandas as pddf = pd.DataFrame([[1,4,0],[2,5,1]],columns=['A','A2','B'])df2 = pd.DataFrame([[1,4,2],[3,5,2]],columns=['A','A2','B'])df = df.merge(df2,on=['A', 'A2'],how='left')df['B_y'].fillna(0, inplace=True)df['B'] = df['B_x']+df['B_y']df = df.drop(['B_x','B_y'], axis=1)print(df)
有没有人有更好的方法?谢谢!
回答:
是的,可以不用合并来完成:
rows = (df[['A','A2']] == df2[['A','A2']]).all(axis=1)df.loc[rows,'B'] = df2.loc[rows,'B']