如何基于匹配的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
相关产品推荐
相关产品推荐

