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

如何在Python Pandas中合并datetime列生成时间戳与标记列?

解决方案

这问题用pandas的内置工具就能轻松搞定,给你两种适配需求的方案,都能得到你想要的结果:

方案一:利用combine_first和行判断(完美保留原始行顺序)

这种方法最贴合你的示例输出,严格按照原始DataFrame的行顺序生成结果,代码简洁直观:

import pandas as pd

# 假设你的原始数据存储在DataFrame df中
# 生成目标DataFrame
result = pd.DataFrame({
    'Timestamp': df['begin'].combine_first(df['end']),
    'Flag': df.apply(lambda row: 'begin' if pd.notna(row['begin']) else 'end', axis=1)
}).reset_index(drop=True)

原理说明:

  • df['begin'].combine_first(df['end']):对每一行优先取begin列的非空值,若begin为空则取end列的值,正好匹配你数据每行仅一个非空时间的特点。
  • apply函数:逐行判断,只要begin列非空就标记为begin,否则标记为end。
  • 最后reset_index(drop=True)重置索引,让结果和你的示例索引完全一致。

方案二:用melt函数(宽表转长表通用方法)

如果以后你的数据结构有变化(比如某行可能同时存在begin和end值),这种通用的宽转长方法会更灵活:

import pandas as pd

# 宽表转长表
melted = df.melt(var_name='Flag', value_name='Timestamp')
# 过滤空值并保持原始顺序
result = melted.dropna(subset=['Timestamp']).sort_index().reset_index(drop=True)

原理说明:

  • melt函数会把begin和end的列名转为Flag列的值,对应列的内容转为Timestamp列的值。
  • dropna去掉时间为空的行,sort_index保证结果顺序和原始数据一致,最后重置索引。

运行任意一种方案后,你都会得到和示例完全一致的DataFrame,包含Timestamp和Flag两列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:42:35