我有一个数据框,其中有一个用于分钟和相关值的列,频率大约为79秒,但有时在一段时间内缺少数据(根本没有行)。我想检测是否有25分钟或更长时间的间隔,如果有,请删除数据集。 我如何测试是否存在差距?
数据框如下所示:
INDEX minutes data
0 23.000 1.456
1 24.185 1.223
2 27.250 0.931
3 55.700 2.513
4 56.790 1.446
... ... ...
因此,存在不规则但很短的间隙,并且间隙超过25分钟。在这种情况下,我希望数据集为空:
我对Python尤其是Pandas还是很陌生,因此进行解释将有助于学习。
答案 0 :(得分:1)
您可以使用numpy.roll
创建具有偏移值的列(即,原始列中的第一个值变为第二个值,第二个变为第三个值,依此类推):
import pandas as pd
import numpy as np
df = pd.DataFrame({'minutes': [23.000, 24.185, 27.250, 55.700, 56.790]})
np.roll(df['minutes'], 1)
# output: array([56.79 , 23. , 24.185, 27.25 , 55.7 ])
将此作为新列添加到数据框中,并用新列减去原始列。
我们还预先删除了第一行,因为我们不想计算与原始列中的第一个时间点和滚动到新列开头的最后一个时间点之间的差。
然后,我们只问减法所得的任何值是否超过您的阈值:
df['rolled_minutes'] = np.roll(df['minutes'], 1)
dropped_df = df.drop(index=0)
diff = dropped_df['minutes'] - dropped_df['rolled_minutes']
(diff > 25).any()
# output: True