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
相关产品推荐
相关产品推荐

