#python #pandas #dataframe #time-series
Вопрос:
У меня есть фрейм данных Pandas с индексом временных рядов около 3 миллионов строк. Этот фрейм данных содержит несколько столбцов, и я хотел бы создать подмножества из этого фрейма данных, зависящие от непрерывности времени, на основе значений в столбцах. Данные сохраняются не по всем столбцам. Под этим я подразумеваю, что в любом из n столбцов есть строки с NaN, и в данном случае это означает, что это не непрерывная временная серия. Я хочу построить подмножества (B,C) из исходного кадра данных (A), и эти подмножества должны быть непрерывными временными рядами без значений NaN в любом столбце.
Пример:
Фрейм данных A
предсказано_ат | x1 | x2 |
---|---|---|
2021-08-21 11:00:00 UTC | 1002 | 202 |
2021-08-21 12:00:00 UTC | 123 | 432 |
2021-08-21 13:00:00 UTC | 1253 | 542 |
2021-08-21 14:00:00 UTC | 231 | NaN |
2021-08-21 15:00:00 UTC | 23 | 232 |
2021-08-21 16:00:00 UTC | 321 | 123 |
2021-08-21 17:00:00 UTC | 125 | 124 |
Подмножество B:
предсказано_ат | x1 | x2 |
---|---|---|
2021-08-21 11:00:00 UTC | 1002 | 202 |
2021-08-21 12:00:00 UTC | 123 | 432 |
2021-08-21 13:00:00 UTC | 1253 | 542 |
Подмножество C:
предсказано_ат | x1 | x2 |
---|---|---|
2021-08-21 15:00:00 UTC | 23 | 232 |
2021-08-21 16:00:00 UTC | 321 | 123 |
2021-08-21 17:00:00 UTC | 125 | 124 |
Как бы вы поступили для этого?
Комментарии:
1. Почему в вашем примере подмножества B и C одинаковы?
2. @RJAdriaansen отредактировано
3. Что вы хотите сделать с этими подмножествами? Каким должен быть результат?
Ответ №1:
Используется cumsum
для установки непрерывной группы:
df['subset'] = df.isna().any(axis=1).cumsum().loc[df.notna().all(axis=1)]
print(df)
# Output:
predicted_at x1 x2 subset
0 2021-08-21 11:00:00 UTC 1002 202.0 0.0
1 2021-08-21 12:00:00 UTC 123 432.0 0.0
2 2021-08-21 13:00:00 UTC 1253 542.0 0.0
3 2021-08-21 14:00:00 UTC 231 NaN NaN
4 2021-08-21 15:00:00 UTC 23 232.0 1.0
5 2021-08-21 16:00:00 UTC 321 123.0 1.0
6 2021-08-21 17:00:00 UTC 125 124.0 1.0
Теперь вы можете делать groupby
или то, что хотите.