Итерировать по одному кадру данных для вычисления новых функций - Python - PullRequest
0 голосов
/ 05 мая 2020

Я использую фрейм данных транзакций по кредитным картам со следующими столбцами:

timestamp, transaction_id, buyer_id, status

Я не хочу создавать новый столбец q_app_1d, который рассчитывается для каждого transaction_id, количество предыдущих transaction_id в зависимости от условия (такое же buyer_id, status = 1, разница между timestamp s <= 1 день). </p>

Я пробовал делать это, используя само- join (то есть соединение фрейма данных с самим собой), но не удалось этого сделать. Я знаю, как это легко сделать в SQL, но я не могу заставить его работать с Pandas.

Любая помощь или советы приветствуются!

Изменить:

Пример ввода:

timestamp, transaction_id, buyer_id, status
01/01/2020 00:00:00, 1, abc123, 1
01/01/2020 00:25:00, 2, abc123, 1
01/01/2020 00:30:00, 3, abc123, 1
01/01/2020 00:45:00, 4, def456, 1
02/01/2020 08:55:00, 5, abc123, 1
02/01/2020 10:55:00, 6, def456, 1
03/01/2020 12:55:00, 7, def456, 1

Пример вывода:

timestamp, transaction_id, buyer_id, status, q_app_1d
01/01/2020 00:00:00, 1, abc123, 1, 0
01/01/2020 00:25:00, 2, abc123, 1, 1 #(considers transaction_id 1)
01/01/2020 00:30:00, 3, abc123, 1, 2 #(considers transaction_id 1,2)
01/01/2020 00:45:00, 4, def456, 1, 0
02/01/2020 08:55:00, 5, abc123, 1, 0 #(more than one day since transaction_id 3)
02/01/2020 10:55:00, 6, def456, 1, 0 #(more than one day since transaction_id 4)
03/01/2020 08:55:00, 7, def456, 1, 1 #(considers transaction_id 6)

1 Ответ

0 голосов
/ 05 мая 2020

Это должно работать:

df['timestamp'] = pd.to_datetime(df['timestamp'],dayfirst=True)
df = df.set_index('timestamp')

_df = (df.groupby('buyer_id')['status'].rolling('24H').count()-1).reset_index()
_df.columns = ['buyer_id','timestamp','q_app_1d']
df = df.reset_index()
df = df.merge(_df)
df.head(7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...