如何在Pandas中按Col1后缀数字匹配将对应行并排展示
解决方案:匹配DataFrame中后缀数字相同的行并拼接至右侧
首先是生成原始DataFrame的代码:
import pandas as pd data = { 'Col1': ['John 1', 'John 2', 'John 3', 'Kyle 1', 'Kyle 3', 'Kyle 2'], 'Col2': ['B', 'C', 'E', 'F', 'F', 'S'], 'Col3': ['1', '1', '1', '1', '1', '2'] } df = pd.DataFrame(data)
生成的原始数据:
Col1 Col2 Col3 0 John 1 B 1 1 John 2 C 1 2 John 3 E 1 3 Kyle 1 F 1 4 Kyle 3 F 1 5 Kyle 2 S 2
需求说明:给每一行找到Col1后缀数字相同的另一行,将该行内容以New Col1/New Col2/New Col3的形式拼在原行右侧,最终得到目标DataFrame。
实现方法(无需嵌套循环,用Pandas自连接更高效)
- 提取后缀数字作为匹配键:从Col1中提取出后缀的数字,生成临时列
suffix,用来作为匹配的依据。 - 自连接匹配:将DataFrame与自身进行连接,连接键为
suffix,同时排除行索引相同的情况(避免匹配到自己)。 - 整理列名与结果:对连接后的新列重命名,保留需要的列并调整顺序。
完整代码:
import pandas as pd data = { 'Col1': ['John 1', 'John 2', 'John 3', 'Kyle 1', 'Kyle 3', 'Kyle 2'], 'Col2': ['B', 'C', 'E', 'F', 'F', 'S'], 'Col3': ['1', '1', '1', '1', '1', '2'] } df = pd.DataFrame(data) # 步骤1:提取后缀数字 df['suffix'] = df['Col1'].str.extract(r'(\d+)', expand=False) # 步骤2:自连接,匹配同后缀的另一行 merged_df = df.merge( df, on='suffix', suffixes=('', '_new'), how='left' ).query('index != index_new') # 排除自身匹配 # 步骤3:整理列名和结果 result = merged_df[['Col1', 'Col2', 'Col3', 'Col1_new', 'Col2_new', 'Col3_new']] result.columns = ['Col1', 'Col2', 'Col3', 'New Col1', 'New Col2', 'New Col3'] print(result)
执行后输出的结果:
Col1 Col2 Col3 New Col1 New Col2 New Col3 0 John 1 B 1 Kyle 1 F 1 1 John 2 C 1 Kyle 2 S 2 2 John 3 E 1 Kyle 3 F 1 3 Kyle 1 F 1 John 1 B 1 4 Kyle 3 F 1 John 3 E 1 5 Kyle 2 S 2 John 2 C 1
补充说明
- 用
str.extract提取数字时,正则r'(\d+)'可以准确捕获Col1末尾的数字部分,适用于后缀是任意位数数字的情况。 - 自连接时用
suffixes参数区分原列和连接后的列,再通过query排除自身行,确保每一行只匹配到对应的目标行。 - 最后通过列重命名,把
_new后缀的列改成需求中的New ColX格式,得到最终结果。
内容的提问来源于stack exchange,提问作者buckenup
相关产品推荐
相关产品推荐

