pandas 合并期间索引不匹配

问题描述 投票:0回答:1

我正在尝试合并 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,根本不重置索引,但结果是一样的。

提前感谢您的帮助!

python pandas dataframe merge
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.