Python 根据索引测量数据帧的时差

Python 根据索引测量数据帧的时差,python,dataframe,datetime,time-series,Python,Dataframe,Datetime,Time Series,我有一个外形良好的数据框 df_总计= 这只是一个伪表,因为数据集太长。我想根据索引计算时间差。就是 如何在python中高效地实现这一点?时差可以是天或分钟 指数1、2等的出现次数差别很大。(8000375,…) 我尝试了以下方法: df_total['diff'] = df_total.sort_values(['index','time']).groupby('index'['time'].diff() df_total= df_total.dropna(subset=['diff']

我有一个外形良好的数据框 df_总计=

这只是一个伪表,因为数据集太长。我想根据索引计算时间差。就是

如何在python中高效地实现这一点?时差可以是天或分钟

指数1、2等的出现次数差别很大。(8000375,…)

我尝试了以下方法:

df_total['diff'] = df_total.sort_values(['index','time']).groupby('index'['time'].diff()
df_total= df_total.dropna(subset=['diff'])

这给了我在每个实例上的差异,而我需要每个索引。

而不是排序,你可以只取每个索引组的最大最小值

# set index
df = df.set_index(df['Index'])

# make sure you have datetime dtype
df['Time'] = pd.to_datetime(df['Time'])

# group by index
grouped = df.groupby(df.index)
# ... and take max-min
ptp = (grouped['Time'].max()-grouped['Time'].min()).dt.total_seconds()/60
请注意,我稍微修改了示例数据,以便可以看到索引的传播:

Index Time 
1 2020-03-30T13:00:00 
1 2020-03-30T14:00:00 
1 2020-03-30T15:55:00 
1 2020-03-30T18:00:00 
3 2020-04-03T09:00:00 
3 2020-04-03T09:50:00 
3 2020-04-03T10:28:00

使用下面的groupby命令以单个代码获取输出

确保Time列是日期时间

 df["Time"] = pd.to_datetime(df["Time"])
 df.groupby("Index")["Time"].apply(lambda g: int((g.max() - g.min()).seconds/60))


希望这能解决你的疑问

OCR现在很好,但下次请将样本数据添加为文本而不是图像;-)如果希望将差值作为小数,请删除int()
df.groupby(“Index”)[“Time”].apply(lambda g:(g.max()-g.min()).seconds/60)
注意,
apply
(虽然看起来不错)引入了一个不必要的迭代步骤。对于这个实现,答案是不正确的。我不知道为什么在我的情况下有效。如果可能的话,你能分享这个错误吗?@AshishJain没有错误。分钟数的计算是错误的
 df["Time"] = pd.to_datetime(df["Time"])
 df.groupby("Index")["Time"].apply(lambda g: int((g.max() - g.min()).seconds/60))