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

如何使用pandas将3个时间戳列合并为单一时间戳列

Pandas宽表转长表实现方案

你可以直接用pandas内置的melt方法完成需求,完整实现逻辑如下:

前置处理

如果你的数据表中null是字符串格式,先统一转成pandas可识别的空值:

import pandas as pd
# 示例数据构造,你实际使用时替换成自己的df即可
df = pd.DataFrame({
    'ID': [1,2,3],
    'j_date_created': ['23.03.2021  07:34:34', '23.03.2021  07:34:34', '23.03.2021  07:34:34'],
    'j_date_completed': ['23.03.2021  07:34:36', '23.03.2021  07:34:37', pd.NA],
    'j_date_rejected': [pd.NA, pd.NA, '04.04.2021  17:48:06']
})
# 字符串null转空值(如果你的数据里是字符串null的话执行这行)
df = df.replace('null', pd.NA)

核心转换逻辑

# 宽表转长表
res = df.melt(
    id_vars=['ID'], # 保留不动的主键列
    value_vars=['j_date_created', 'j_date_completed', 'j_date_rejected'], # 需要展开的时间列
    var_name='Activity', # 存储原列名的字段名
    value_name='timestamp' # 存储时间值的字段名
)
# 提取Activity类型,去掉前缀j_date_
# 如果pandas版本低于1.4,可替换为res['Activity'] = res['Activity'].str.replace('j_date_', '', regex=False)
res['Activity'] = res['Activity'].str.removeprefix('j_date_')
# 删除时间为空的无效行
res = res.dropna(subset=['timestamp'])
# 按ID排序,和期望输出顺序保持一致
res = res.sort_values(by=['ID', 'Activity'], ignore_index=True)

执行完成后res就是你需要的最终格式。

内容的提问来源于stack exchange,提问作者Alde Joshua Wibowo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:18:05