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

如何一次性计算Pandas DataFrame中每相邻日期列的天数差

高效计算连续步骤日期差的Pandas实现

当然有高效的实现方式!不用手动遍历列折腾,咱们用pandas的向量化操作就能轻松搞定,既简洁又跑得快,还能自动生成你需要的差值列名。

步骤1:将字符串日期转换为datetime类型

首先得把原始的mm/dd格式字符串转成pandas能识别的日期类型,这样才能计算天数差:

import pandas as pd

# 构建你的原始DataFrame
data = {
    'Step 1': ['1/1', '1/6', '1/9'],
    'Step 2': ['2/13', '2/27', '3/2'],
    'Step 3': ['3/23', '3/26', '4/1'],
    'Step 4': ['4/7', '4/11', '4/18']
}
df = pd.DataFrame(data)

# 转换为datetime格式(指定format避免解析错误)
df = df.apply(pd.to_datetime, format='%m/%d')

步骤2:计算连续列的天数差并命名

利用diff(axis=1)可以直接计算后列与前列的日期差(axis=1表示按列方向计算),再通过列表推导式动态生成你要的列名:

# 计算列间日期差,去掉第一列的NaN(因为第一列没有前序列)
diff_df = df.diff(axis=1).iloc[:, 1:]

# 将timedelta类型转换为整数天数
diff_df = diff_df.apply(lambda col: col.dt.days)

# 动态生成差值列名:比如diff_btwn_1_2、diff_btwn_2_3...
diff_col_names = [f'diff_btwn_{i}_{i+1}' for i in range(1, len(df.columns))]
diff_df.columns = diff_col_names

# 合并原DataFrame和差值结果
result_df = pd.concat([df, diff_df], axis=1)

# 可选:把日期转回原字符串格式(如果不需要datetime类型的话)
result_df.iloc[:, :4] = result_df.iloc[:, :4].dt.strftime('%m/%d')

print(result_df)

运行这段代码后,你就能得到预期的输出:

Step 1 Step 2 Step 3 Step 4  diff_btwn_1_2  diff_btwn_2_3  diff_btwn_3_4
0    1/1   2/13   3/23    4/7             43             38             15
1    1/6   2/27   3/26   4/11             52             27             16
2    1/9    3/2    4/1   4/18             52             30             17

为什么这个方法高效?

  • 全程用pandas的向量化操作,避免了手动循环行/列,数据量大的时候速度会比循环快几个数量级;
  • 列名是动态生成的,不管你有多少个Step列(比如Step5、Step6),代码都能自动适配生成对应的差值列;
  • 日期处理逻辑清晰,不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 23:12:38