Pandas, временной ряд: количество (идентификаторы, значения) после запуска временной метки - PullRequest
2 голосов
/ 16 апреля 2020

Учитывая следующий DataFrame (таблица временных рядов в формате tidy ):

|     date     |  id  |   value   |
|--------------|------|-----------|
|  2019-01-01  |  AAA |   10      |
|  2019-01-01  |  BBB |   20      |
|  2019-01-01  |  CCC |   30      |
|  2019-01-02  |  AAA |   11      |
|  2019-01-02  |  CCC |   31      |
|  2019-01-03  |  BBB |   22      |

Я хотел бы вернуть таблицу, индексированную по столбцу date, со столбцами:

  • n_id, который представляет порядковый номер id, который сообщает по крайней мере 1 значение на дату, равную или последующую дате индекса
  • n_value, которая представляет рабочий номер ненулевое значение value, о котором сообщается в или после даты индекса

В приведенном выше примере желаемый результат будет

|     date     |  n_id|   n_value |
|--------------|------|-----------|
|  2019-01-01  |  3   |    6      | # ("AAA" reports [10,11], "BBB" reports [20, 22], "CCC" reports [30, 31])
|  2019-01-02  |  3   |    3      | # ("AAA" reports [11], "BBB" reports [22], "CCC" reports [31])
|  2019-01-03  |  1   |    1      | # ("BBB" reports [22])

Что является наиболее оптимальным pandas -это способ сделать это?

1 Ответ

0 голосов
/ 16 апреля 2020

С некоторой пробой и ошибкой, это мой подход:

s = df.pivot('date','id','value').iloc[::-1].notnull().cumsum()
ret_df = pd.DataFrame({
    'n_id': s.gt(0).sum(1),
    'n_value': s.sum(1)
}).sort_index().reset_index()

Вывод:

        date  n_id  n_value
0 2019-01-01     3        6
1 2019-01-02     3        3
2 2019-01-03     1        1
...