Панды: добавить новые строки с равномерно распределенными временными метками при заданном условии - PullRequest
0 голосов
/ 29 марта 2019

У меня есть следующий фрейм данных:

    value                 timestamp
20.713936   2019-03-04 17:59:36 UTC
20.871742   2019-03-04 18:08:31 UTC

Я хотел бы добавить новые строки в фрейм данных в зависимости от разницы во времени столбца меток времени (если его больше 1 минуты, но меньше 15 минут),Это должно выглядеть, хотя и не совсем так:

    value                 timestamp
20.713936   2019-03-04 17:59:36 UTC
      NaN   2019-03-04 18:00:36 UTC
      NaN   2019-03-04 18:01:36 UTC
      NaN   2019-03-04 18:02:36 UTC
      NaN   2019-03-04 18:03:36 UTC
      NaN   2019-03-04 18:04:36 UTC
      NaN   2019-03-04 18:05:36 UTC
      NaN   2019-03-04 18:06:36 UTC
      NaN   2019-03-04 18:07:36 UTC
20.871742   2019-03-04 18:08:31 UTC

Я думал о создании функции, которая будет делать что-то вроде этого:

  1. вычислить разницу во времени между двумя метками времени ипроверить состояние.
  2. Если условие истинно, найдите количество минут в разнице и используйте его, чтобы узнать, сколько строк я собираюсь вставить (если минутная разница равна 9, тогда я вставлю 8 новых строк).
  3. Заполняйте строки новой отметки времени с приращениями последовательных +1 минут.

Поскольку Панды настолько мощны, мне было интересно, есть ли способ достичь той же цели без необходимостинапишите эти функции и избегайте использования циклов if / for.

Я думаю, что просто добавить 1 к каждой предыдущей отметке времени проще, чем найти одинаково распределенный вектор отметки времени.

Я тоже думал о том, чтобы сделать это с помощью вспомогательного фрейма и выполнить «упорядоченное слияние» по метке времени, но я заблудился с этим.

Кто-то знает, каксделай это?

Спасибо за ваше время!

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

вы должны взглянуть на pandas.date_range () .Я думаю, это то, что вы ищете.

1 голос
/ 29 марта 2019

Использование pandas.to_datetime и pandas.DataFrame.asfreq:

import pandas as pd

df
       value           timestamp
0  20.713936 2019-03-04 17:59:36
1  20.871742 2019-03-04 18:08:31

df['timestamp'] = pd.to_datetime(df['timestamp'])
new_df = df.set_index('timestamp', drop=True)
new_df = new_df.asfreq('1min').reset_index().append(df.iloc[-1]).reset_index(drop=True)

Выход:

            timestamp      value
0 2019-03-04 17:59:36  20.713936
1 2019-03-04 18:00:36        NaN
2 2019-03-04 18:01:36        NaN
3 2019-03-04 18:02:36        NaN
4 2019-03-04 18:03:36        NaN
5 2019-03-04 18:04:36        NaN
6 2019-03-04 18:05:36        NaN
7 2019-03-04 18:06:36        NaN
8 2019-03-04 18:07:36        NaN
9 2019-03-04 18:08:31  20.871742
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...