python - Pandas 计算过滤数据集的时间增量
问题描述
如果我编造一些时间序列数据:
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')
推荐阅读
- java - 如何在 put 方法中列出成为参数?
- git - 是否可以在 WSL 上运行 git submodule update --init?
- python - 调用另一个函数时函数的返回值
- linux - bash 按最后一次出现的键排序
- php - 带有 CURL 的数组多维问题
- python - opencv TypeError:“插值”是此函数的无效关键字参数
- android - 如何在不添加一天的情况下将“yyyy-MM-dd'T'HH:mm:ssZZZZZ”转换为“yyyy-MM-dd”?
- quantum-computing - AssertionError:错误的颜色格式“ansibrightred”
- mysql - 如何在 MySQL 连接中选择等于 Type X 或 Type Y 的数据?
- verilog - Quartus Prime 在 $error 命令中抛出错误