Python 如何合并/覆盖Pandas中的列
我目前有两个CSV文件。其中一个(f1)在一列中具有约1000个唯一ID,另一个(f2)是在同名列中具有约50个唯一ID的子集 我想根据ID合并这些列,但是当f1和f2有同名的列时,我想选择f2列中的信息。当我运行当前的合并函数时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 =
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')