我目前有两个CSV文件。其中一个(f1)在一列中有大约1000个唯一ID,另一个(f2)是一个在同一列中有~50个唯一ID的子集。
我想基于ID合并这些,但是当f1和f2具有相同名称的列时,我想选择f2列中的信息。当我运行当前的合并功能
时merged = f1.merge(f2, on='KeyID', how='left');
具有相同名称的列生成两次,带有_x和_y版本。有办法解决这个问题吗?
答案 0 :(得分:2)
f2.set_index('KeyID').combine_first(f1.set_index('KeyID'))
答案 1 :(得分:1)
只需将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)
答案 2 :(得分:1)
Combine_first方法仅在左侧数据帧位置为空或为null时才采用右侧数据帧的元素。我认为问题的目的是选择正确的信息。为了这: 我们应该在两个数据帧之间建立标题交集。之后,删除该交叉点,合并键。最后没有重复的键,我们已经用右边的列“覆盖”了左边的列
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')