确定 pandas 在两个数据帧之间合并后哪些列相等

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

我使用后缀选项与 pandas 进行了合并,如下所示:

df3 = df1.merge(df2, how='inner',on='key',suffixes=('_first', '_second'))

我现在需要:

  1. 对大约 60 对列进行成对检查,即 (
    x_first == x_second
    )
  2. 如果列相等,请将
    x_first
    重命名为
    x
    并删除
    x_second
  3. 如果它们不相等,则保留两列

对于中等大小的 pandas 数据框(约 6M 行 x 200 列)如何做到这一点?

python pandas
1个回答
0
投票

示例代码

您需要提供示例,而不仅仅是描述您想要的内容。

import pandas as pd

data1 = {'key': [1, 2, 3, 4, 5],
         'col1': [10, 20, 30, 40, 50],
         'col2': [10, None, 30, 40, 50],
         'col3': ['a', 'b', 'c', 'd', 'e'], 
         'col4': [1, 2, 3, 4, 5]}
data2 = {'key': [5, 2, 3, 4, 1],
         'col1': [50, 20, 30, 40, 10],
         'col2': [50, None, 30, 40, 10],
         'col3': ['a', 'b', 'c', 'd', 'x'], 
         'col4': [4, 5, 6, 7, 8], 
         'col5': [4, 5, 6, 7, 8]}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

example

代码

您可以通过查找其值与键相同的列并使用键指定来完成此操作。由于您可能还要处理包含 NaN 的列,因此我使用函数

compare
来查找具有不同值的列,并将它们从公共列中排除。

# find common columns between df1 and df2
cols = df1.columns.intersection(df2.columns)

# Use 'key' as the index, compare values, and find columns with differences
cols_diff = (
    df1[cols]
    .set_index('key')
    .compare(df2[cols].set_index('key').reindex(df1['key']))
    .columns
    .get_level_values(0)
)

# exclude columns with differences to find columns with identical values
cols_on = cols.difference(cols_diff).tolist()

# df1 and df2 using 'key' and columns with identical values
out = df1.merge(df2, how='inner', on=cols_on, suffixes=('_first', '_second'))

输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.