Python 如何合并/覆盖Pandas中的列

Python 如何合并/覆盖Pandas中的列,python,pandas,Python,Pandas,我目前有两个CSV文件。其中一个(f1)在一列中具有约1000个唯一ID,另一个(f2)是在同名列中具有约50个唯一ID的子集 我想根据ID合并这些列,但是当f1和f2有同名的列时,我想选择f2列中的信息。当我运行当前的合并函数时 merged = f1.merge(f2, on='KeyID', how='left'); 具有相同名称的列将生成两次,分别为_x和_y版本。有办法解决这个问题吗?使用 只需将f1附加到f2并删除所有重复项: import pandas as pd df1 =

我目前有两个CSV文件。其中一个(f1)在一列中具有约1000个唯一ID,另一个(f2)是在同名列中具有约50个唯一ID的子集

我想根据ID合并这些列,但是当f1和f2有同名的列时,我想选择f2列中的信息。当我运行当前的合并函数时

merged = f1.merge(f2, on='KeyID', how='left');
具有相同名称的列将生成两次,分别为_x和_y版本。有办法解决这个问题吗?

使用


只需将f1附加到f2并删除所有重复项:

import pandas as pd

df1 = pd.DataFrame(data=[['A', 442],
                         ['B', 998],
                         ['C', 45],
                         ['F', 777]]
                   , columns=['KeyID', 'Info'])

df2 = pd.DataFrame(data=[['A', 12],
                        ['B', 77],
                        ['C', 6556],
                        ['D', 33],
                        ['E', 876]
                        ]
                  ,columns=['KeyID', 'Info'])


df_new = df1.append(df2, ignore_index=True).drop_duplicates(subset='KeyID')
print(df_new)

当左数据帧位置为空或null时,Combine_first方法仅获取右数据帧的元素。我认为这个问题的目的是选择正确的信息。为此: 我们应该在两个数据帧之间建立一个标头交集。在此之后,删除该兴趣部分的合并键。最后,没有重复的键,我们用右列“覆盖”了左列

hdr_left = set(left_df)
hdr_right = set(right_df)
common_hdr = hdr_left.intersection(hdr_right)
common_hdr.remove('primary_key')
common_hdr = list(common_hdr)
left_df_to_merge = left_df[left_df.columns.difference(common_hdr)]
merged_with_right_override = pd.merge(left_df_to_merge, right_df, on='primary_key', how='left')

回答很好,但不是超级健壮。如果要保留的数据是数字数据,并且数据帧结构被展平,则会出现这种情况
hdr_left = set(left_df)
hdr_right = set(right_df)
common_hdr = hdr_left.intersection(hdr_right)
common_hdr.remove('primary_key')
common_hdr = list(common_hdr)
left_df_to_merge = left_df[left_df.columns.difference(common_hdr)]
merged_with_right_override = pd.merge(left_df_to_merge, right_df, on='primary_key', how='left')