【发布时间】:2022-08-19 04:19:08
【问题描述】:
我有一个包含时间序列数据的数据集。当某个参数满足条件时,我想测量它的持续时间。
我可以循环遍历条件发生变化的所有位置,但这似乎效率低下。
进行矢量化的最佳方法是什么?
例子:
import numpy as np
import pandas as pd
np.random.seed(0)
# generate dataset:
df = pd.DataFrame({\'condition\': np.random.randint(0, 2, 24)},
index = pd.date_range(start=\'2020\', freq=\'M\', periods=24))
df
数据样本:
目标:
我的目标是在此示例中创建一个持续时间为 \'1\' 的子连续出现的列:
到目前为止我做了什么:
# find start and end of condition:
ends = df[df.condition.diff() < 0].index
start = df[df.condition.diff() > 0].index[:ends.size]
# loop through starts and determine length
for s, e in zip(start, ends):
df.loc[e, \'duration\'] = e - s
# move 1 step back so it matches with last value position
df[\'duration\'] = df.duration.shift(-1)
在此示例中,这非常快,但循环使其在较大数据集时变慢。做这样的事情最快的方法是什么?
标签: python pandas dataframe numpy indexing