这是我的数据:
time id w
0 2018-03-01 00:00:00 39.0 1176.000000
1 2018-03-01 00:15:00 39.0 NaN
2 2018-03-01 00:30:00 39.0 NaN
3 2018-03-01 00:45:00 39.0 NaN
4 2018-03-01 01:00:00 39.0 NaN
5 2018-03-01 01:15:00 39.0 NaN
6 2018-03-01 01:30:00 39.0 NaN
7 2018-03-01 01:45:00 39.0 1033.461538
8 2018-03-01 02:00:00 39.0 1081.066667
9 2018-03-01 02:15:00 39.0 1067.909091
10 2018-03-01 02:30:00 39.0 NaN
11 2018-03-01 02:45:00 39.0 1051.866667
12 2018-03-01 03:00:00 39.0 1127.000000
13 2018-03-01 03:15:00 39.0 1047.466667
14 2018-03-01 03:30:00 39.0 1037.533333
我想索引:10
因为我需要知道哪个时间不连续,我需要添加值。
我想知道每个'时间'前后是否有NAN。如果不是我需要知道它索引。我需要为它增加价值。
我的数据非常庞大。我需要更快的方式。
我真的需要你的帮助。非常感谢。
答案 0 :(得分:1)
这应该非常快:
import numpy as np
index = np.array([4561,4723,4724,4725,4726,5154,5220,5221,5222,5223,5224,5293,5437,5484,5485,5486,5487])
continuous = np.diff(index) == 1
not_continuous = np.where(~continuous[1:] & ~continuous[:-1])[0] + 1 # check on both 'sides', +1 because you 'loose' one index in the diff operation
index[not_continuous]
array([5154, 5293, 5437])
它不能很好地处理第一个值,但这是非常模糊的,因为您没有要检查的先前值。如果对您来说重要,请添加此额外检查...可能与最后一个值相同。
答案 1 :(得分:1)
不确定我是否理解正确。如果您希望列time
的索引更改超过15分钟,则索引的索引将超过4,您可以这样做:
df['time'] = pd.to_datetime(df['time'], format='%Y-%m-%d %H:%M:%S')
df['Delta']=(df['time'].subtract(df['time'].shift(1)))
df['Delta'] = df['Delta'].astype(str)
print df.index[df['Delta'] != '0 days 00:15:00.000000000'].tolist()
输出是:
[4561, 4723, 5154, 5220, 5293, 5437, 5484]
同样,如果我理解你的话,就这样使用:
df.index[(pd.isnull(df['w'])) & (pd.notnull(df['w'].shift(1))) & (pd.notnull(df['w'].shift(-1)))].tolist()
输出:
[10]