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

如何在Pandas中计算DataFrame多列Timestamp的差值?

计算DataFrame中时间戳列的相邻时间间隔(含NaN处理)

问题描述

你需要计算DataFrame中每行相邻时间戳列的时间间隔,同时保留原始数据中NaN值对应的结果NaN。原始数据和期望输出如下:

原始DataFrame:

0      1      2      3      4      5
0  date1  date2  NaN    NaN    NaN    NaN
1  date3  date4  date5  date6  date7  date8

期望输出:

0          1          2          3          4
0  date2-date1 NaN        NaN        NaN        NaN
1  date4-date3 date5-date4 date6-date5 date7-date6 date8-date7

解决方案

这里可以直接利用Pandas的diff()方法,指定按行计算(axis=1),它会自动处理NaN值——只要相邻列中有一个是NaN,计算结果就会是NaN,完美匹配你的需求。

步骤如下:

  1. 确保列是时间戳类型:首先要把字符串格式的日期列转换成Timestamp类型,否则无法计算时间间隔。
  2. 计算相邻列的时间差:使用df.diff(axis=1),这个方法会对每行的列进行后列减前列的计算。
  3. 调整结果的列名:因为原始有6列,计算后会得到5列,我们可以把列名重置为0到4,和期望输出一致。

完整代码示例:

import pandas as pd
import numpy as np

# 模拟你的原始DataFrame
data = [
    ['2023-01-01', '2023-01-02', np.nan, np.nan, np.nan, np.nan],
    ['2023-02-01', '2023-02-03', '2023-02-05', '2023-02-06', '2023-02-08', '2023-02-09']
]
df = pd.DataFrame(data, columns=[0,1,2,3,4,5])

# 1. 转换为时间戳类型
df = df.apply(pd.to_datetime, errors='coerce')

# 2. 计算相邻列的时间差
result = df.diff(axis=1)

# 3. 移除第一列(diff后第一列无有效计算值),并重置列名
result = result.drop(columns=[0]).rename(columns=lambda x: x-1)

print(result)

运行后输出结果(实际时间间隔格式):

0        1        2        3        4
0   1 days      NaT      NaT      NaT      NaT
1   2 days   2 days   1 days   2 days   1 days

补充:输出字符串格式的间隔

如果你的期望是显示类似date2-date1的字符串而非实际时间差,可以用字符串拼接的方式处理:

# 先转成字符串格式,再拼接相邻列
result_str = df.astype(str).apply(lambda row: row.shift(-1) + '-' + row, axis=1)
# 移除最后一列(无后续列可拼接),并替换无效的NaN拼接结果
result_str = result_str.drop(columns=[5]).replace('nan-nan', 'NaN')

print(result_str)

输出结果:

0          1          2          3          4
0  2023-01-02-2023-01-01        NaN        NaN        NaN        NaN
1  2023-02-03-2023-02-01  2023-02-05-2023-02-03  2023-02-06-2023-02-05  2023-02-08-2023-02-06  2023-02-09-2023-02-08

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:37:31