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

Pandas实现两个时间序列按相同ID分组按日期排序展示事件列表

实现方案

核心思路是先把两个异构的事件表标准化为同结构的长表,再合并后按人分组排序聚合,具体实现如下:

前置依赖

需要用到pandas库,没有安装的话先执行pip install pandas

完整代码

import pandas as pd

# 示例数据构造,实际使用时替换成你自己的df_a、df_b读入逻辑
df_a = pd.DataFrame({
    'Person_Id': ['ID1', 'ID1', 'ID2', 'ID3'],
    'Event_A_Date': ['2023-01-01', '2023-01-03', '2023-01-02', '2023-01-01'],
    'A_Reason': ['X_A', 'Y_A', 'X_A', 'Z_A']
})

df_b = pd.DataFrame({
    'Person Id': ['ID1', 'ID2', 'ID2', 'ID3'],
    'Event_B_Date': ['2023-01-05', '2023-01-04', '2023-01-03', '2023-01-02'],
    'B_Reason': ['Z_B', 'Z_A', 'Y_B', 'X_B']
})

# 1. 预处理表A
df_a_processed = df_a.rename(columns={
    'Event_A_Date': 'event_date',
    'A_Reason': 'reason'
})[['Person_Id', 'event_date', 'reason']]

# 2. 预处理表B:先统一Person_Id字段名
df_b_processed = df_b.rename(columns={
    'Person Id': 'Person_Id',
    'Event_B_Date': 'event_date',
    'B_Reason': 'reason'
})[['Person_Id', 'event_date', 'reason']]

# 3. 合并两个事件表
df_all = pd.concat([df_a_processed, df_b_processed], ignore_index=True)

# 4. 转换日期格式,避免字符串排序出错
df_all['event_date'] = pd.to_datetime(df_all['event_date'])

# 5. 分组排序聚合:按Person_Id分组,组内按日期升序排序后聚合成列表
# 如果同一天有A/B两个事件,要指定顺序的话可以在sort_values里加第二关键字,比如加个来源字段排序
df_result = df_all.sort_values(by='event_date') \
                  .groupby('Person_Id')['reason'] \
                  .agg(list) \
                  .reset_index(name='Event_sequence')

# 输出结果
print(df_result)

输出示例

运行上述代码得到的结果和预期样例完全一致:

Person_IdEvent_sequence
ID1[X_A, Y_A, Z_B]
ID2[X_A, Y_B, Z_A]
ID3[Z_A, X_B]

注意事项

  • 如果需要处理同一天的事件排序,可以在预处理阶段给A、B表各加一个event_type字段,排序时加by=['event_date', 'event_type']即可自定义同日期下的先后顺序
  • 日期字段如果有非标准格式,pd.to_datetime可以加format参数指定格式提升转换效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 04:27:01