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

2024-10-02 18:22:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

df_total

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

df_time_diff

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

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

我尝试了以下方法:

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

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


Tags: 数据方法dfindextimediff指数次数
2条回答

不需要排序,只需为每个索引组取max-min

# 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
ptp
Out[29]: 
Index
1    300.0
3     88.0
Name: Time, dtype: float64

请注意,我稍微修改了示例数据,以便可以看到索引的传播:

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))

希望这能解决你的疑问

相关问题 更多 >