Предположим, у меня есть такой df:
| ID | дата | target_row |
| 1 | 2016-01-01 | 0 |
| 1 | 2016-02-01 | 0 |
| 1 | 2016-03-01 | 0 |
| 1 | 2016-04-01 | 0 |
| 1 | 2016-05-01 | 1 |
| 1 | 2016-06-01 | 0 |
| 1 | 2016-07-01 | 0 |
| 1 | 2016-08-01 | 0 |
Моя задача состоит в том, чтобы проверить, равны ли следующие 4 target_row значения 1, включая текущие, поэтому оно должно быть одним. (groupby('id') is needed
).
Итак, желаемый вывод это: | ID | дата | target_row | next_6_target
| 1 | 2016-01-01 | 0 | 0
| 1 | 2016-02-01 | 0 | 1
| 1 | 2016-03-01 | 0 | 1
| 1 | 2016-04-01 | 0 | 1
| 1 | 2016-05-01 | 1 | 1
| 1 | 2016-06-01 | 0 | 0
| 1 | 2016-07-01 | 0 | 0
| 1 | 2016-08-01 | 0 | 0
Я пробовал следующим образом: df['next_6_target'] = df.groupby('id').rolling(window=6)[['target_row']].max().reset_index(drop=True)
и затем выполняю сдвиг - но это дает неправильные результаты
В SQL решение должно выглядеть примерно так:
MAX(target_row) OVER (PARTITION BY ID ORDER BY DATE ROWS BETWEEN CURRENT ROW AND 3 FOLLOWING)