You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Lambda函数按条件计算员工参与销售金额总和并更新DataFrame

解决方案

你原来用apply逐行处理的方式在数据量大时效率极低,且语法易出错。推荐先将销售记录按参与员工拆分行,再分组求和后合并到员工每日列表中,这种方法更高效且易维护。

步骤1:展开销售记录的参与员工列

用explode把EEs_Present中的每个员工ID拆成单独行,让每条销售记录对应每个参与员工:

# 展开EEs_Present列,每个员工ID对应一条销售记录
exploded_sales = all_sales_df.explode('EEs_Present').rename(columns={'EEs_Present': 'EE_ID'})
# 确保EE_ID类型与daily_employee_df一致(统一为整数类型)
exploded_sales['EE_ID'] = exploded_sales['EE_ID'].astype(int)

步骤2:按日期和员工分组计算销售总额

# 分组求和,得到每位员工每日的销售总额
ee_daily_sales = exploded_sales.groupby(['Date', 'EE_ID'])['Sale_Amt'].sum().reset_index()

步骤3:合并到daily_employee_df中

用merge将计算好的总额合并到原员工表,未参与销售的员工总额填0:

daily_employee_df = daily_employee_df.merge(
    ee_daily_sales,
    on=['Date', 'EE_ID'],
    how='left'
).fillna({'Sale_Amt': 0.0})
# 重命名列名更清晰
daily_employee_df = daily_employee_df.rename(columns={'Sale_Amt': 'Daily_Total_Sales'})

原方法报错原因及低效写法(不推荐)

你之前的求和尝试语法错误,大概率是因为布尔索引后未正确提取Sale_Amt再求和。即便修正语法,这种逐行遍历的方式在数千条销售记录时会重复大量筛选操作,效率极低:

# 仅作语法参考,数据量大时不建议使用
daily_employee_df['Daily_Total_Sales'] = daily_employee_df.apply(
    lambda x: all_sales_df[
        (all_sales_df['Date'] == x['Date']) & 
        (all_sales_df['EEs_Present'].apply(lambda c: x['EE_ID'] in c))
    ]['Sale_Amt'].sum(),
    axis=1
)

内容的提问来源于stack exchange,提问作者Not Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:10:31