Начиная с этого примера данных ...
import pandas as pd
start_data = {"person_id": [1, 1, 1, 1, 2], "nid": [1, 2, 3, 4, 1],
"beg": ["Jan 1 2018", "Jan 5 2018", "Jan 10 2018", "Feb 5 2018", "Jan 25 2018"],
"end": ["Feb 1 2018", "Mar 4 2018", "", "Oct 18 2018", "Nov 10 2018"]}
df = pd.DataFrame(start_data)
df["beg"] = pd.to_datetime(df["beg"])
df["end"] = pd.to_datetime(df["end"])
Начальная точка:
person_id nid beg end
0 1 1 2018-01-01 2018-02-01
1 1 2 2018-01-05 2018-03-04
2 1 3 2018-01-10 NaT
3 1 4 2018-02-05 2018-10-18
4 2 1 2018-01-25 2018-11-10
Результат цели:
person_id date 1 2 3 4
1 2018-01-01 1 0 0 0
1 2018-01-05 1 1 0 0
1 2018-01-10 1 1 1 0
1 2018-02-01 0 1 1 0
1 2018-02-05 0 1 1 1
1 2018-03-04 0 0 1 1
1 2018-10-18 0 0 1 0
2 2018-01-25 1 0 0 0
2 2018-11-10 0 0 0 0
Я пытаюсь связать всеактивные nid
к ассоциированному person_id
Затем они будут присоединены к другому фрейму данных на основе последнего date
, меньшего, чем столбец датированной активности.И, наконец, это будет частью ввода в прогнозирующую модель.
Выполнение чего-то вроде pd.get_dummies(df["nid"])
get это вывод:
1 2 3 4
0 1 0 0 0
1 0 1 0 0
2 0 0 1 0
3 0 0 0 1
4 1 0 0 0
Так что это нужно переместить в другой индекс, представляющийдата вступления в силу, сгруппированная по person_id
, а затем агрегированная в соответствии с выходом цели.
Специальный бонус для тех, кто может придумать подход, который будет правильно использовать Dask .Это то, что мы используем для других частей конвейера из-за масштабируемости.Это может быть несбыточной мечтой, но я подумал, что отправлю это, чтобы посмотреть, что вернется.