我正在尝试合并 Python、pandas、df1 和 df2 中的两个数据框。
我试图将它们合并到Column1上,然后将Column2的值从df2分配给df1。
这是我的代码:
df1 = df1.reset_index()
merged = df1.merge(df2, on='Column1', how='left', indicator=True, suffixes=('_df1', '_df2'))
mask = (
(df1['Column1'].notna()) &
(merged['_merge'] == 'both')
)
df1.loc[mask, 'Column2'] = merged.loc[mask, 'Column2_df2']
然而,指数变得混乱。当我打印合并时,这些值正确匹配。但是当我在分配值后打印 df1 时,我可以看到 Column2 中的值分配不正确,并且我可以看到索引与合并表中打印出的索引不匹配。
我尝试在使用.loc时添加reset_index,根本不重置索引,但结果是一样的。
提前感谢您的帮助!
IIUC,您可以避免使用
merge
而是使用 map
:
df1['Column2'] = (df1['Column1']
.map(df2.set_index('Column1')['Column2'])
.fillna(df1['Column2'])
)
示例:
# input
df1 = pd.DataFrame({'Column1': ['A', 'B', None, 'D'],
'Column2': [1, 2, 3, 4]
})
df2 = pd.DataFrame({'Column1': ['B', 'C', None, 'A'],
'Column2': [10, 20, 30, 40]
})
# output
Column1 Column2
0 A 40.0
1 B 10.0
2 None 30.0
3 D 4.0