识别相同的列并将它们融合为一个
Recognise identical columns and melt them into one
我有问题。我正在将两个数据帧 df1
和 df2
合并在一起。我在两者中都有一个名为 name
的列。合并正确地执行所有操作,并向每个 name
添加一个 _
和一个 x
或 y
。不幸的是,这些专栏说的是同样的事情。
是否有比较 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
我想要的
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
如果您在 table 上的名字完全相同,您可以使用它加入
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
我有问题。我正在将两个数据帧 df1
和 df2
合并在一起。我在两者中都有一个名为 name
的列。合并正确地执行所有操作,并向每个 name
添加一个 _
和一个 x
或 y
。不幸的是,这些专栏说的是同样的事情。
是否有比较 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
我想要的
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
如果您在 table 上的名字完全相同,您可以使用它加入
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