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

Pandas DataFrame按列分组后组内按时间戳排序并计算时间差如何实现?

原有代码问题分析

你写的代码存在两个问题:

  • diff()方法对每个分组的第一行计算时会返回NaN,没有做填充0的处理,不符合需求
  • 直接对全局排序后计算的结果索引是排序后的顺序,直接赋值回原DataFrame会出现值和行错位的问题
正确实现方式

方式1:先全局排序再计算(适合需要最终结果按时间排序的场景)

import pandas as pd

# 按时间全局排序
df_sorted = df.sort_values(by='Timestamp').copy()
# 分组计算差值,首行空值填充为0时间差
df_sorted['time_diff'] = df_sorted.groupby('Col1')['Timestamp'].diff().fillna(pd.Timedelta(0))

# 如果需要恢复原数据的行顺序,可额外执行下面的代码
# df = df_sorted.sort_index()

方式2:分组内单独处理(自动对齐原表索引,无需调整行顺序)

import pandas as pd

df['time_diff'] = df.groupby('Col1')['Timestamp'].apply(
    lambda ser: ser.sort_values().diff().fillna(pd.Timedelta(0))
)

两种方式的时间差值计算结果完全一致,区别仅在于输出的行顺序是否和原表保持一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:45:03