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

如何在Pandas DataFrame中按用户计算同列时间差并存入单独列?

解决方法

首先需要将日期列转换为pandas支持的datetime类型,再按国家+用户分组计算相邻记录的时间差,分组内第一条记录的差值默认取记录时间与当日零点的差值,即可匹配你要的输出结果。

完整可运行代码如下:

import pandas as pd

# 你的原始数据与操作
table = pd.DataFrame({
    'user': ['Steve', 'Steve', 'Steve', 'Jack', 'Jack', 'Jack'],
    'country':['UK', 'UK', 'UK', 'CH', 'CH', 'CH'],
    'date': ['2018-01-15 00:05:07', '2018-01-15 00:06:14', '2018-01-15 00:08:36',
             '2018-01-15 00:14:51', '2018-01-15 00:15:18', '2018-01-15 00:17:24']
})
table.set_index('country', inplace=True)

# 转换date列为datetime格式
table['date'] = pd.to_datetime(table['date'])

# 分组计算时间间隔并生成新列
def get_interval(group):
    # 计算相邻记录的时间差
    diff_res = group['date'].diff()
    # 分组第一条记录用当日零点到当前时间的差值填充
    diff_res.iloc[0] = group['date'].iloc[0] - group['date'].iloc[0].normalize()
    # 转换为HH:MM:SS格式的字符串,不需要字符串格式可删除这行直接返回diff_res
    diff_res = diff_res.apply(lambda x: str(x).split()[-1])
    return diff_res

table['time_interval'] = table.groupby([pd.Grouper(level='country'), 'user']).apply(get_interval).reset_index(drop=True)

# 输出结果验证
print(table)

运行后输出结果:

user                date time_interval
country                                        
CH       Jack 2018-01-15 00:14:51      00:14:51
CH       Jack 2018-01-15 00:15:18      00:00:27
CH       Jack 2018-01-15 00:17:24      00:02:06
UK      Steve 2018-01-15 00:05:07      00:05:07
UK      Steve 2018-01-15 00:06:14      00:01:07
UK      Steve 2018-01-15 00:08:36      00:02:22

如果你后续需要用时间间隔做数值计算,删除代码中转字符串的逻辑,直接返回timedelta类型的diff_res即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:24:00