如何从多事件字符串中提取指定事件日期并拆分到不同列?
Pandas提取不定顺序事件对应日期的解决方案
核心思路
由于事件顺序不固定、数量可变,无法依赖固定索引拆分,需通过匹配事件标识的方式提取对应日期,步骤如下:
1. 构造示例数据
先模拟用户的原始DataFrame:
import pandas as pd data = { 'id': [1, 2, 3], 'event': [ 'rec:2023-05-10, call:2023-05-11, visit:2023-05-12', 'visit:2023-06-01, rec:2023-06-02', 'call:2023-07-01, visit:2023-07-02' ] } df = pd.DataFrame(data)
2. 编写日期提取函数
定义函数处理单个事件字符串,匹配目标事件并提取日期:
def extract_event_date(event_str, target_event): # 统一处理逗号/空格分隔符,拆分事件列表 events = event_str.replace(',', '').split() for event in events: if event.startswith(f'{target_event}:'): return event.split(':')[1] # 无匹配事件时返回空值 return pd.NA
3. 生成目标列
将函数应用到event列,分别提取rec和visit对应的日期:
df['rec_date'] = df['event'].apply(lambda x: extract_event_date(x, 'rec')) df['visit_date'] = df['event'].apply(lambda x: extract_event_date(x, 'visit'))
4. 整理结果
保留需要的列(可按需移除原event列):
result_df = df[['id', 'rec_date', 'visit_date']] print(result_df)
输出结果
id rec_date visit_date 0 1 2023-05-10 2023-05-12 1 2 2023-06-02 2023-06-01 2 3 <NA> 2023-07-02
进阶优化(处理复杂分隔符)
如果事件间存在多个空格或混合分隔符,改用正则表达式拆分更稳健:
import re def extract_event_date(event_str, target_event): events = re.split(r'[, ]+', event_str.strip()) for event in events: if event.startswith(f'{target_event}:'): return event.split(':')[1] return pd.NA
内容的提问来源于stack exchange,提问作者A. P.
相关产品推荐
相关产品推荐

