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
如果我编一些时间序列数据:
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