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

Python中如何匹配两个数据集的日期并关联人员团队信息

数据集匹配与名称标准化解决方案

核心问题拆解

要完成需求需解决两个关键问题:

  1. 名称格式不一致:比如BLAKE D.与Blake无法直接匹配,需先做标准化处理
  2. 日期范围筛选:将df2中Start_Date落在df1对应人员PRIOR_DATE和CREATED_DATE区间内的记录筛选出来

分步实现方案(Python Pandas)

1. 名称标准化处理

统一两个数据集的名称格式,消除大小写、后缀/中间名差异:

import pandas as pd
import re

# 定义名称标准化函数
def standardize_name(name):
    # 转小写+去除首尾空格
    cleaned = name.strip().lower()
    # 移除中间名/后缀(如 "Blake D." → "blake")
    cleaned = re.sub(r'\s*\..*', '', cleaned)
    return cleaned

# 为两个数据集添加标准化名称列
df1['NAME_STD'] = df1['NAME'].apply(standardize_name)
df2['NAME_STD'] = df2['Name'].apply(standardize_name)

2. 日期类型转换

将字符串格式的日期转为datetime类型,才能进行范围比较:

# 转换df1的日期列
df1[['CREATED_DATE', 'PRIOR_DATE']] = df1[['CREATED_DATE', 'PRIOR_DATE']].apply(
    pd.to_datetime, format='%m/%d/%Y'
)

# 转换df2的日期列
df2[['Start_Date', 'End_Date']] = df2[['Start_Date', 'End_Date']].apply(
    pd.to_datetime, format='%m/%d/%Y'
)

3. 合并数据集并筛选日期范围

先通过标准化名称合并,再筛选符合日期条件的记录:

# 按标准化名称合并两个数据集
merged = pd.merge(df2, df1, on='NAME_STD', how='inner')

# 筛选Start_Date处于PRIOR_DATE和CREATED_DATE之间的记录
filtered = merged[
    (merged['Start_Date'] >= merged['PRIOR_DATE']) &
    (merged['Start_Date'] <= merged['CREATED_DATE'])
]

4. 整理输出格式

调整列顺序并还原日期格式,匹配期望输出:

# 选择需要的列并调整顺序
result = filtered[['ID', 'Name', 'Start_Date', 'End_Date', 'STATUS', 'Team']]

# 将日期转回原字符串格式
result['Start_Date'] = result['Start_Date'].dt.strftime('%m/%d/%Y')
result['End_Date'] = result['End_Date'].dt.strftime('%m/%d/%Y')

# 输出结果
print(result)

扩展方案(处理复杂名称差异)

如果存在拼写错误(如Adam vs Adem),可以使用fuzzywuzzy库做模糊匹配:

from fuzzywuzzy import process

# 为df2的每个名称匹配df1中最相似的标准化名称
df2['NAME_STD'] = df2['Name'].apply(
    lambda x: process.extractOne(x.lower(), df1['NAME_STD'])[0]
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 11:03:09