Итак, у меня есть DataFrame, который представляет покупки с 4 столбцами:
- дата (дата покупки в формате% Y-% m-% d)
- customer_ID (строка столбец)
- претензия (1-0 столбец означает, что 1 - покупатель жаловался на покупку, 0 - покупатель не жаловался)
- претензия_значение (для претензии = 1 это означает, сколько стоимость претензии компании, для претензии = 0 это NaN)
Мне нужно построить 3 новых столбца:
- past_purchases (сколько покупок указывает конкретный c клиент до этой покупки)
- past_claims (сколько претензий было у указанного клиента c до этой покупки)
- past_claims_value (сколько стоили прошлые претензии клиента)
Это мой подход до сих пор:
past_purchases = []
past_claims = []
past_claims_value = []
for i in range(0, len(df)):
date = df['date'][i]
customer_ID = df['customer_ID'][i]
df_temp = df[(df['date'] < date) & (df['customer_ID'] == customer_ID)]
past_purchases.append(len(df_temp))
past_claims.append(df_temp['claim'].sum())
past_claims_value.append(df['claim_value'].sum())
df['past_purchases'] = pd.DataFrame(past_purchases)
df['past_claims'] = pd.DataFrame(past_claims)
df['past_claims_value'] = pd.DataFrame(past_claims_value)
Код работает нормально, но он слишком медленный. Кто-нибудь может заставить его работать быстрее? Спасибо!
Ps: Важно проверить, что дата старше, если у клиента было 2 покупки в одну и ту же дату, они не должны учитываться друг для друга.
Pss: Я готов использовать библиотеки для параллельной обработки, такие как многопроцессорная обработка, concurrent.futures, joblib или dask, но никогда раньше не было подобным образом.
Ожидаемый результат: