如何在Python中复现Excel的sumifs功能并完成销售额调整计算
Python 复现Excel SUMIFS 调整销售额计算逻辑
我们可以用pandas快速实现你需要的计算逻辑,代码可直接运行,结果和你举例的计算结果完全匹配:
步骤1:导入依赖&读取数据
import pandas as pd # 从本地Excel读取数据的话用这行,替换成你自己的文件路径 # df = pd.read_excel('你的数据文件.xlsx') # 这里是构造和你截图一致的样例数据用于测试,实际使用可以删掉这段 df = pd.DataFrame({ 'Territory': ['AMS','AMS','AMS','AMS','AMS','APAC','APAC','APAC','APAC','APAC'], 'Product': ['Product1','Product2','Product3','Product4','All','Product1','Product2','Product3','Product4','All'], 'Sales': [100000, 200000, 200000, 100000, 700000, 200000, 300000, 300000, 200000, 1200000] })
步骤2:执行计算
逻辑完全对齐你描述的SUMIFS规则:先统计每个区域所有非All产品的总销售额,再匹配对应区域All产品的总基准销售额,最后按占比计算调整后销售额。
# 提取每个区域All产品对应的基准销售额 territory_all_sales = df[df['Product'] == 'All'].set_index('Territory')['Sales'].to_dict() # 统计每个区域非All产品的总销售额 territory_product_total = df[df['Product'] != 'All'].groupby('Territory')['Sales'].sum().to_dict() # 计算调整后销售额,All行默认留空,可按需修改 df['Adjusted_Sales'] = df.apply( lambda x: round(x['Sales'] / territory_product_total[x['Territory']] * territory_all_sales[x['Territory']], 0) if x['Product'] != 'All' else None, axis=1 )
步骤3:结果导出
计算完成后可以直接导出到Excel:
df.to_excel('调整后销售额结果.xlsx', index=False)
运行后AMS区域Product1的调整后销售额为116667,APAC区域Product1的调整后销售额为240000,和你示例的计算结果完全一致。
内容的提问来源于stack exchange,提问作者SASguru
相关产品推荐
相关产品推荐

