You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Python中对比两个DataFrame列,获取匹配行计数与行号

Python实现DataFrame列匹配统计

需求说明

现有两个DataFrame(df1、df2),需要对比df1的Name列与df2的Applicant列,生成包含匹配状态(是/否)、匹配行的行号以及匹配次数的结果表。

示例数据

import pandas as pd

# 构造df1
df1 = pd.DataFrame({
    'Name': ['Pat', 'Chris', 'Pat', 'Noris', 'Mit', 'Chen'],
    'Score': [82, 38, 92, 88, 62, 58],
    'Year': [1990, 1993, 1994, 1997, 1999, 1996]
})

# 构造df2
df2 = pd.DataFrame({
    'Applicant': ['Pat', 'Chris', 'Meet']
})

实现代码

# 给df1添加从1开始的行号列
df1['row_num'] = df1.index + 1

# 按Name分组,收集匹配行号(转为逗号分隔的字符串)、统计匹配次数
match_info = df1.groupby('Name').agg(
    Matched_Row_reference=('row_num', lambda x: ','.join(map(str, x))),
    Count=('row_num', 'count')
).reset_index().rename(columns={'Name': 'Applicant'})

# 与df2左连接,保留所有Applicant项
result = df2.merge(match_info, on='Applicant', how='left')

# 生成匹配状态、填充缺失值
result['Match (Y/N)'] = result['Count'].apply(lambda x: 'Y' if pd.notna(x) else 'N')
result['Matched Row reference'] = result['Matched_Row_reference'].fillna('NA')
result['Count'] = result['Count'].fillna(0).astype(int)

# 调整列顺序为预期格式
result = result[['Applicant', 'Match (Y/N)', 'Matched Row reference', 'Count']]

print(result)

运行结果

ApplicantMatch (Y/N)Matched Row referenceCount
PatY1,32
ChrisY21
MeetNNA0

代码说明

  • 行号处理:给df1添加从1开始的行号列,匹配预期结果的行号格式。
  • 分组聚合:通过groupby对Name分组,拼接行号字符串并统计匹配次数。
  • 合并填充:用左连接保留df2所有项,对未匹配项填充NA和0,生成匹配状态标识。
  • 列序调整:确保输出列与预期结果一致。

内容的提问来源于stack exchange,提问作者Tushar Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:55:24