如何针对特定用例对两个 pandas 数据帧执行左连接?

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

示例数据: 这是我的数据框的简化表示:

我的第一个数据框(df1)就像:

col1 col2 col3 col4 第5栏
1 2 a 3 4
11 22 33 44
111 222 啊啊

我的第二个数据框(df2)类似于:

col3 col4 第5栏
a 3 4
332 442
啊啊 333 444

我希望我的合并数据框(result_df)看起来像:

col1 col2 col3 col4 第5栏
1 2 a 3 4
11 22 33 44
11 22 332 442
111 222 啊啊 333 444

我尝试将 pd.merge 函数与左连接一起使用:

result_df = pd.merge(df1, df2, on='col3', how='left')

result_df 看起来像:

col1 col2 col3 col4_x col5_x col4_y col5_y
1 2 a 3 4 3 4
11 22 33 44 332 442
111 222 啊啊 333 444

我试图理解为什么生成的数据框有额外的列以及如何实现所需的输出。非常感谢任何帮助或见解。

python pandas dataframe merge left-join
1个回答
0
投票

这就是

merge
的工作原理。您通常会在
merge
调用之后进行投影,以按照您喜欢的方式组织列:

result_df = (
    pd.merge(df1, df2, on='col3', how='left')
    .drop(columns=['col4_x', 'col5_x'])
    .rename(columns={'col4_y': 'col4', 'col5_y': 'col5'})
)

您可以通过为一侧指定空后缀来保存

rename
步骤:

result_df = (
    pd.merge(df1, df2, on='col3', how='left', suffixes=('_x', None))
    .drop(columns=['col4_x', 'col5_x'])
)

如果保留数据的标准不像“只删除一侧”那么简单,则必须使用特定逻辑重新创建

col4
col5

result_df = pd.merge(df1, df2, on='col3', how='left')
result_df['col4'] = result_df[['col4_x', 'col4_y']].min(axis=1)
result_df['col5'] = result_df.apply(mylogic, axis=1)
result_df.drop(columns=['col4_x', 'col4_y', 'col5_x', 'col5_y'], inplace=True)
© www.soinside.com 2019 - 2024. All rights reserved.