Python 根据索引测量数据帧的时差
我有一个外形良好的数据框 df_总计= 这只是一个伪表,因为数据集太长。我想根据索引计算时间差。就是 如何在python中高效地实现这一点?时差可以是天或分钟 指数1、2等的出现次数差别很大。(8000375,…) 我尝试了以下方法: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_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))