我遇到问题,找到了解决方案,但我觉得这是错误的方法。也许,有一种更“规范”的方式来做到这一点。
问题
我有两个要合并的数据框,而没有多余的列,也没有擦除现有的信息。范例:
现有数据框(df)
A A2 B 0 1 4 0 1 2 5 1
要合并的数据框(df2)
A A2 B 0 1 4 2 1 3 5 2
我想更新df与df2是否列“A”和“A2”相对应。结果将是(:
df
df2
A A2 B 0 1 4 2.0 <= Update value ONLY 1 2 5 1.0
这是我的解决方案,但我认为这不是一个很好的解决方案。
import pandas as pd df = 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']