【问题标题】:Pandas compute time delta on filtered datasetsPandas 计算过滤数据集的时间增量
【发布时间】:2021-12-22 07:05:33
【问题描述】:

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

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 时的时间增量是有意义的。

【问题讨论】:

    标签: python pandas time-series timedelta


    【解决方案1】:

    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
    

    【讨论】:

    • 我意识到该列是数据,而不是时间戳(我应该多睡:p)
    • 呵呵,多睡觉总是好的:p
    • 在我的真实数据集上,timedelta.sum() 是 1 days 12:09:02 是不是意味着 1 天 12 小时 9 分 2 秒?
    • @HenryHub - 是的,正确!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-07
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      相关资源
      最近更新 更多