Как создать лямбда-функцию для суммирования значений фрейма данных на основе критериев и наличия в списке

У меня есть один фрейм данных, содержащий ежедневный список сотрудников, а другой — серию продаж.

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 поддерживает динамическую типизацию, что облегчает разработку.


1
58
1

Ответ:

Решено

Очень близко - вы можете использовать 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)