Pandas 计算过滤数据集的时间增量

Pandas compute time delta on filtered datasets

如果我编一些时间序列数据:

import pandas as pd
import numpy as np
from numpy.random import seed

# seed random number generator
seed(1)

time = pd.date_range('6/28/2021', periods=100, freq='1min')
df = pd.DataFrame(np.random.randint(100, size=100), index=time,columns=['data'])

df.plot(figsize=(25,8))

这将绘制:

然后过滤data大于50的数据: df = df.loc[df['data'] > 50]

当数据高于值 50 时,如何计算时间增量?仅高于 50 的值。例如,如果我这样做:

# Compute delta time 
df['time_delta'] = df.index.to_series().diff().astype('timedelta64[m]')

df.time_delta.sum()

我认为总和不正确,因为这将包括数据低于 50 时的时间增量,完全希望只有检索值高于 50 时的时间增量才有意义。

您可以mask计算diff后的数据:

df.index.to_series().diff().mask(df['data'].le(50)).sum()

输出:Timedelta('0 days 00:44:00')

IIUC,你要:

df["timedelta"] = df.index.to_series().diff().where(df["data"].gt(50))

>>> df["timedelta"].sum()
Timedelta('0 days 00:44:00')

这应该是正确的,因为恰好有 44 行“数据”大于 50,每行对应 1 分钟的时差:

>>> df["data"].gt(50).sum()
44