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

如何在Pandas DataFrame中计算与首个值的秒级时间差

解决方案

首先需要确保Date列是datetime类型,如果还未转换,先执行类型转换:

import pandas as pd

# 假设你的DataFrame名为df
df['Date'] = pd.to_datetime(df['Date'])

接下来提取用户0对应的基准时间:

base_time = df.loc[df['user'] == 0, 'Date'].iloc[0]

最后计算每行日期与基准时间的差值,转换为秒并添加为diff列:

df['diff'] = (df['Date'] - base_time).dt.total_seconds().astype(int)

完整代码示例

import pandas as pd

# 构造示例DataFrame
data = {
    'Date': ['2012-12-05 09:30:00', '2012-12-05 09:35:00', '2012-12-05 09:40:00',
             '2012-12-05 09:45:00', '2012-12-05 09:50:00', '2012-12-06 09:30:00',
             '2012-12-06 09:35:00', '2012-12-06 09:40:00', '2012-12-06 09:45:00'],
    'user': [0, 1, 2, 3, 4, 5, 6, 7, 8]
}
df = pd.DataFrame(data)

# 转换Date列为datetime类型
df['Date'] = pd.to_datetime(df['Date'])

# 获取用户0的基准时间
base_time = df.loc[df['user'] == 0, 'Date'].iloc[0]

# 计算时间差(秒)
df['diff'] = (df['Date'] - base_time).dt.total_seconds().astype(int)

print(df)

运行后输出结果:

Date  user   diff
0 2012-12-05 09:30:00     0      0
1 2012-12-05 09:35:00     1    300
2 2012-12-05 09:40:00     2    600
3 2012-12-05 09:45:00     3    900
4 2012-12-05 09:50:00     4   1200
5 2012-12-06 09:30:00     5  86400
6 2012-12-06 09:35:00     6  86700
7 2012-12-06 09:40:00     7  87000
8 2012-12-06 09:45:00     8  87300

说明

  • 无需使用groupby是因为需求是所有行相对于同一个基准(user0的时间),而非按日期分组计算每日最早值的差值。
  • dt.total_seconds()用于将时间差(Timedelta类型)转换为总秒数,astype(int)确保结果为整数。
  • 注意:你给出的预期结果中user5的diff为1500是错误的,2012-12-06 09:30:00与2012-12-05 09:30:00相差完整一天,即86400秒。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:22:30