此处不谈如何使用 pandas.merge,主要谈 merge函数的参数 suffiex
参考文档 pandas.merge — pandas 2.1.4 documentation
suffiex:用于重叠列的字符串后缀元组,默认为 (‘x', 'y')
如果连接的两个表中,没有重复的列名,就使用各自原列名,此时定义的后缀不生效。当有重复列名时,则使用后缀。
import pandas as pd
a = list('ABCDE')
b = [1,2,3,4,5]
In [34]: d1 = pd.DataFrame(zip(a,b), columns={'a', 'b'})
Out[34]:
a b
0 A 1
1 B 2
2 C 3
3 D 4
4 E 5
# 注意第一个表d1中保留的仍然是原来的列名 'b'
In [35]: dt = d1.merge(d2, how='inner', on = ['a'], suffixes=('','_d2'))\
...: .merge(d2, how='inner', on = ['a'], suffixes=('','_d3'))\
...: .merge(d2, how='inner', on = ['a'], suffixes=('','_d4'))\
...: .merge(d2, how='inner', on = ['a'], suffixes=('','_d5'))
Out[35]:
a b b_d2 b_d3 b_d4 b_d5
0 A 1 1 1 1 1
1 B 2 2 2 2 2
2 C 3 3 3 3 3
3 D 4 4 4 4 4
4 E 5 5 5 5 5
# 注意第3个表中保留的仍然是原来的列名 'b', 而没有使用 '_d3'作为后缀
In [37]: dt = d1.merge(d2, how='inner', on = ['a'], suffixes=('d1','_d2'))\
...: .merge(d2, how='inner', on = ['a'], suffixes=('','_d3'))\
...: .merge(d2, how='inner', on = ['a'], suffixes=('','_d4'))\
...: .merge(d2, how='inner', on = ['a'], suffixes=('','_d5'))
Out[37]:
a b_d1 b_d2 b b_d4 b_d5
0 A 1 1 1 1 1
1 B 2 2 2 2 2
2 C 3 3 3 3 3
3 D 4 4 4 4 4
4 E 5 5 5 5 5