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

如何参照Pandas销售目标DataFrame对销售DataFrame按限定条数求和

实现方案

核心思路

  • 先对销售表按客户分组,给每个客户的销售记录按现有顺序生成递增行号(从1开始计数)
  • 将销售目标表和加了行号的销售表按客户ID关联
  • 过滤出行号小于等于对应客户销售目标的记录
  • 按客户分组聚合,分别计算总实际销售笔数、符合要求的销售额总和,匹配对应销售目标即可

代码实现(兼容pandas 0.24.0)

import pandas as pd

# 构造示例销售表
sales_df = pd.DataFrame({
    'Cust_ID': ['A11','A11','A11','A11','B22','B22','B22','C33','C33'],
    'Date': ['02.01.2021','03.01.2021','04.01.2021','05.01.2021','05.01.2021','06.01.2021','07.01.2021','08.01.2021','09.01.2021'],
    'Value': [100,100,100,100,100,100,100,100,100]
})

# 构造示例销售目标表
target_df = pd.DataFrame({
    'Cust_ID': ['A11','B22','C33'],
    'Sales_Target': [4,2,4]
})

# 1. 给每个客户的销售记录加行号(按现有顺序,从1开始计数)
sales_df['row_num'] = sales_df.groupby('Cust_ID').cumcount() + 1

# 2. 关联销售目标
sales_with_target = sales_df.merge(target_df, on='Cust_ID', how='left')

# 3. 过滤出符合目标数量的前N条记录
valid_sales = sales_with_target[sales_with_target['row_num'] <= sales_with_target['Sales_Target']]

# 4. 聚合计算结果
# 先算每个客户总实际销售笔数
total_sales_count = sales_df.groupby('Cust_ID').size().reset_index(name='Sales')
# 算符合要求的销售额总和
valid_sales_sum = valid_sales.groupby(['Cust_ID','Sales_Target'])['Value'].sum().reset_index(name='Sales_Value')
# 合并得到最终结果
result = valid_sales_sum.merge(total_sales_count, on='Cust_ID', how='left')

# 调整列顺序为要求的格式
result = result[['Cust_ID','Sales_Target','Sales','Sales_Value']]
print(result)

输出结果

Cust_ID  Sales_Target  Sales  Sales_Value
0     A11             4      4          400
1     B22             2      3          200
2     C33             4      2          200

注意事项

  • 代码中销售记录的顺序默认使用原始销售表的顺序,如果你需要按日期排序后再取前N条,可以在加行号前先对sales_df按Cust_ID和Date排序即可。
  • 所有用到的方法均兼容pandas 0.24.0版本,无需高版本API支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:27:03