У меня есть один фрейм данных, содержащий ежедневный список сотрудников, а другой — серию продаж.
daily_employee_df:
| EE_ID| Date |
| -----| ----------|
| 101| 20220904 |
| 102| 20220904 |
| 106| 20220904 |
| 102| 20220905 |
| 103| 20220905 |
| 104| 20220905 |
all_sales_df:
| Sale_ID | Date | Sale_Amt| EEs_Present |
| ------- | --------|---------|----------------|
| 0001| 20220904| 100.04| [101, 102, 106]|
| 0002| 20220905| 998.06| [102, 103, 104]|
Каков эффективный способ суммирования значений Sale_Amt, за которые каждый сотрудник присутствовал в каждый день, и добавления этой суммы к daily_employee_df? Я имею дело с тысячами продаж каждый день.
Я смог получить количество продаж для каждого сотрудника в день, используя следующее:
daily_employee_df['EE_Sales'] = daily_employee_df.apply(lambda x: len(all_sales_df[(all_sales_df['Date'] == x['Date']) & ([str(x['EE_ID']) in c for c in list(all_sales_df['EEs_Present'])])]), axis = 1)
Но я не был в состоянии суммировать общую сумму продажи подобным образом. Я попытался обернуть его суммой, но синтаксис, похоже, не работает.
Спасибо за любую помощь!
🤔 А знаете ли вы, что...
Python поддерживает динамическую типизацию, что облегчает разработку.
Очень близко - вы можете использовать sum() и добавить столбец, который вы суммируете, в конце с помощью ['Sale_Amt']
Количество продаж (уже сделано в вопросе):
daily_employee_df['EE_Sales_Count'] = daily_employee_df.apply(lambda x: len(all_sales_df[(all_sales_df['Date'] == x['Date']) & ([str(x['EE_ID']) in c for c in list(all_sales_df['EEs_Present'])])]), axis = 1)
Сумма продаж:
daily_employee_df['EE_Sales_Sum'] = daily_employee_df.apply(lambda x: sum(all_sales_df[(all_sales_df['Date'] == x['Date']) & ([str(x['EE_ID']) in c for c in list(all_sales_df['EEs_Present'])])]['Sale_Amt']), axis = 1)