我有一个问题。我正在合并两个数据框df1
和df2
在一起。在两者中都有一个叫做name
的列。合并正确地做了一切,并将x
或y
的_
添加到每个name
。不幸的是,列表示的是同样的事情。是否有比较name_x
和name_y
列的选项,如果每行中的值相同,将该列合并到name
中?
应该注意的是,我不仅有name
列,还有几个不同的和相同的列,所以它应该像一个循环。例如,我的数据集有100多个列,因此很难手动确定哪些列具有相同的名称,哪些列没有。
# df1
customerId name
0 1 Anton
1 2 Marie
2 3 Max
3 4 Fran
4 5 Josie
#df2
customerIddd name name2
0 1 Anton Antond
1 2 Marie Maride
2 3 Max Ma2x
3 4 Fran Frdsan
4 5 Josie Joasdsie
代码import pandas as pd
d = {'customerId': [1, 2, 3, 4, 5],
'name': ['Anton', 'Marie', 'Max', 'Fran', 'Josie']
}
df = pd.DataFrame(data=d)
d2 = {'customerIddd': [1, 2, 3, 4, 5],
'name': ['Anton', 'Marie', 'Max', 'Fran', 'Josie'],
'name2': ['Antond', 'Maride', 'Ma2x', 'Frdsan', 'Joasdsie']
}
df2 = pd.DataFrame(data=d2)
print(df2)
df_merged = pd.merge(df,
df2, how='inner',
left_on=['customerId'], right_on=['customerIddd'])
print(df_merged)
了
customerId name_x customerIddd name_y name2
0 1 Anton 1 Anton Antond
1 2 Marie 2 Marie Maride
2 3 Max 3 Max Ma2x
3 4 Fran 4 Fran Frdsan
4 5 Josie 5 Josie Joasdsie
What I want
customerId name customerIddd name2
0 1 Anton 1 Antond
1 2 Marie 2 Maride
2 3 Max 3 Ma2x
3 4 Fran 4 Frdsan
4 5 Josie 5 Joasdsie
可以与suffixes=['', '_right']
合并,然后删除名称以_right
结尾的所有列:
df_merged = pd.merge(df,
df2, how='inner',
left_on=['customerId'], right_on=['customerIddd'],
suffixes=['', '_right'])
df_merged.drop([col for col in df_merged.columns if col.endswith('_right')], axis=1)
输出(用于您的示例数据)
customerId name customerIddd name2
0 1 Anton 1 Antond
1 2 Marie 2 Maride
2 3 Max 3 Ma2x
3 4 Fran 4 Frdsan
4 5 Josie 5 Joasdsie
如果两个表上的名字完全相同,则可以在join to
中使用它df_merged = pd.merge(df,
df2, how='inner',
left_on=['customerId','name'], right_on=['customerIddd','name'])
print(df_merged)
输出将是您想要的
customerId name customerIddd name2
0 1 Anton 1 Antond
1 2 Marie 2 Maride
2 3 Max 3 Ma2x
3 4 Fran 4 Frdsan
4 5 Josie 5 Joasdsie