我使用后缀选项与 pandas 进行了合并,如下所示:
df3 = df1.merge(df2, how='inner',on='key',suffixes=('_first', '_second'))
我现在需要:
x_first == x_second
)x_first
重命名为 x
并删除 x_second
对于中等大小的 pandas 数据框(约 6M 行 x 200 列)如何做到这一点?
示例代码
您需要提供示例,而不仅仅是描述您想要的内容。
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)
代码
您可以通过查找其值与键相同的列并使用键指定来完成此操作。由于您可能还要处理包含 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'))
输出: