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

如何基于匹配的customer_email从DataFrame提取日期至目标DataFrame?

解决方案:DataFrame邮箱匹配并提取日期

方法一:使用merge关联(推荐处理多对一/一对多场景)

通过左连接保留data1的所有行,以customer_email为匹配键,提取data2中的observation日期:

import pandas as pd

# 仅选取data2中需要的列进行关联,避免冗余
merged_result = pd.merge(
    data1,
    data2[['customer_email', 'observation']],
    on='customer_email',
    how='left'
)

# 将匹配到的日期赋值给data1的date_first_order列
data1['date_first_order'] = merged_result['observation']
  • how='left'保证data1的所有行都被保留,若data2中无对应邮箱,对应位置会填充NaN
  • 若data2存在重复邮箱,可先去重再关联:
    # 保留每个邮箱最早的observation日期
    data2_clean = data2.drop_duplicates(subset='customer_email', keep='first')
    # 再用上述merge代码关联data2_clean
    

方法二:使用map快速匹配(适合一对一无重复场景)

如果data2中每个邮箱仅对应一条记录,可将其转为字典后快速映射:

# 构建邮箱到日期的映射字典
email_date_map = data2.set_index('customer_email')['observation'].to_dict()

# 直接映射到data1的目标列
data1['date_first_order'] = data1['customer_email'].map(email_date_map)

额外注意事项

  • 若日期格式不统一,先转换为datetime类型:
    data2['observation'] = pd.to_datetime(data2['observation'])
    data1['date_first_order'] = pd.to_datetime(data1['date_first_order'])
    
  • 若匹配后存在NaN值,可根据需求填充(比如用data1中的其他日期字段,或固定值):
    data1['date_first_order'] = data1['date_first_order'].fillna(pd.Timestamp('2000-01-01'))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:27:10