Залить только последние N товаров - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть этот простой временной ряд

In [1]: df = pd.DataFrame({'fire': [1, 1, 1]}, 
   ...:                   index=pd.to_datetime([
   ...:                       '2016-03-16 23:20:10', 
   ...:                       '2016-03-16 23:28:58', 
   ...:                       '2016-03-16 23:38:15']))
   ...:                   

In [2]: df
Out[2]: 
                     fire
2016-03-16 23:20:10     1
2016-03-16 23:28:58     1
2016-03-16 23:41:15     1

Я хочу уменьшить его на 1 минуту и ​​добавить еще один столбец с именем fire_in_the_next_5_minutes .Повторная выборка выполняется легко, но я не смог найти способ ограничить обратную засыпку только 5 предыдущими строками .Ближайшие данные, которые я получаю, это:

In [3]: df = df.resample('1min').mean()
   ...: df['fire_in_the_next_5_minutes'] = df['fire'].fillna(method='backfill')
   ...: 

In [4]: df
Out[4]: 
                     fire  fire_in_the_next_5_minutes
2016-03-16 23:20:00   1.0                         1.0
2016-03-16 23:21:00   NaN                         1.0  <-- should remain NaN
2016-03-16 23:22:00   NaN                         1.0  <-- should remain NaN
2016-03-16 23:23:00   NaN                         1.0
2016-03-16 23:24:00   NaN                         1.0
2016-03-16 23:25:00   NaN                         1.0
2016-03-16 23:26:00   NaN                         1.0
2016-03-16 23:27:00   NaN                         1.0
2016-03-16 23:28:00   1.0                         1.0
2016-03-16 23:29:00   NaN                         1.0  <-- should remain NaN
2016-03-16 23:30:00   NaN                         1.0  <-- should remain NaN
2016-03-16 23:31:00   NaN                         1.0  <-- should remain NaN
2016-03-16 23:32:00   NaN                         1.0  <-- should remain NaN
2016-03-16 23:33:00   NaN                         1.0
2016-03-16 23:34:00   NaN                         1.0
2016-03-16 23:35:00   NaN                         1.0
2016-03-16 23:36:00   NaN                         1.0
2016-03-16 23:37:00   NaN                         1.0
2016-03-16 23:38:00   1.0                         1.0

Могу ли я выполнить обратную засыпку другим способом, не используя метод fillna?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вам необходимо предоставить аргумент limit для fillna:

df['fire_in_the_next_5_minutes'] = df['fire'].fillna(method='backfill', limit=5)
0 голосов
/ 23 ноября 2018

Использование bfill с limit

df = df.resample('1min').mean()
df['fire_in_the_next_5_minutes'] = df['fire'].bfill(limit=5)
df
Out[173]: 
                     fire  fire_in_the_next_5_minutes
2016-03-16 23:20:00   1.0                         1.0
2016-03-16 23:21:00   NaN                         NaN
2016-03-16 23:22:00   NaN                         NaN
2016-03-16 23:23:00   NaN                         1.0
2016-03-16 23:24:00   NaN                         1.0
2016-03-16 23:25:00   NaN                         1.0
2016-03-16 23:26:00   NaN                         1.0
2016-03-16 23:27:00   NaN                         1.0
2016-03-16 23:28:00   1.0                         1.0
2016-03-16 23:29:00   NaN                         NaN
2016-03-16 23:30:00   NaN                         NaN
2016-03-16 23:31:00   NaN                         NaN
2016-03-16 23:32:00   NaN                         NaN
2016-03-16 23:33:00   NaN                         1.0
2016-03-16 23:34:00   NaN                         1.0
2016-03-16 23:35:00   NaN                         1.0
2016-03-16 23:36:00   NaN                         1.0
2016-03-16 23:37:00   NaN                         1.0
2016-03-16 23:38:00   1.0                         1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...