识别相同的列并将它们合并为一个



我有一个问题。我正在合并两个数据框df1df2在一起。在两者中都有一个叫做name的列。合并正确地做了一切,并将xy_添加到每个name。不幸的是,列表示的是同样的事情。是否有比较name_xname_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

最新更新