news 2026/7/8 23:24:30

影刀RPA Excel条件求和:SUMIF与COUNTIF

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
影刀RPA Excel条件求和:SUMIF与COUNTIF

影刀RPA Excel条件求和:SUMIF与COUNTIF

作者:林焱

什么情况用什么

需要统计某个地区的销售总额、计算达成目标的订单数、按部门统计平均工资——这些条件统计在Excel里用SUMIF、COUNTIF、SUMIFS、COUNTIFS。但在影刀RPA处理大批量数据时,用pandas的分组聚合或条件筛选更快更灵活,还能写复杂条件。

适用场景:按条件汇总金额、统计满足条件的记录数、多条件交叉统计、分类排名计算。

怎么做

COUNTIF:条件计数

importpandasaspd df=pd.read_excel(r"C:\Data\sales.xlsx")# COUNTIF:统计销售额大于10000的订单数count=len(df[df['金额']>10000])# 统计某地区的订单数count_bj=len(df[df['地区']=='北京'])[video(video-kX15gV2g-1783502000801)(type-csdn)(url-https://live.csdn.net/v/embed/526818)(image-https://v-blog.csdnimg.cn/asset/582d14c3bd0451c5399cd990b56e2a0d/cover/Cover0.jpg)(title-拼多多店群自动化报活动上架!)]# 统计包含某关键词的记录数count_phone=df['产品名'].str.contains('手机',na=False).sum()# 多条件计数(COUNTIFS)count_multi=len(df[(df['地区']=='北京')&(df['金额']>10000)&(df['状态']=='已完成')])

SUMIF:条件求和

# SUMIF:统计北京地区销售总额sum_bj=df[df['地区']=='北京']['金额'].sum()# SUMIFS:多条件求和sum_multi=df[(df['地区']=='北京')&(df['状态']=='已完成')&(df['金额']>1000)]['金额'].sum()# 按地区分组求和(相当于所有地区的SUMIF)region_sum=df.groupby('地区')['金额'].sum().reset_index()region_sum.columns=['地区','总金额']

AVERAGEIF:条件平均

# AVERAGEIF:北京地区平均订单金额avg_bj=df[df['地区']=='北京']['金额'].mean()# 多条件平均avg_multi=df[(df['地区']=='北京')&(df['状态']=='已完成')]['金额'].mean()

生成条件统计报表

defgenerate_summary_report(df,output_path):"""生成多维度条件统计报表"""withpd.ExcelWriter(output_path,engine='openpyxl')aswriter:# 1. 按地区统计region_stats=df.groupby('地区').agg(订单数=('订单ID','count'),总金额=('金额','sum'),平均金额=('金额','mean'),最大金额=('金额','max'),最小金额=('金额','min')).round(2).reset_index()region_stats.to_excel(writer,sheet_name='按地区统计',index=False)# 2. 按状态统计status_stats=df.groupby('状态').agg(订单数=('订单ID','count'),总金额=('金额','sum')).reset_index()status_stats.to_excel(writer,sheet_name='按状态统计',index=False)# 3. 按地区×状态交叉统计cross=pd.pivot_table(df,values='金额',index='地区',columns='状态',aggfunc='sum',fill_value=0,margins=True,margins_name='合计')cross.to_excel(writer,sheet_name='交叉统计')# 4. 条件筛选统计conditions={'大额订单(>1万)':df[df['金额']>10000],'小额订单(<1千)':df[df['金额']<1000],'北京已完成':df[(df['地区']=='北京')&(df['状态']=='已完成')],'上海待处理':df[(df['地区']=='上海')&(df['状态']=='待处理')],}summary_data=[]forname,subsetinconditions.items():summary_data.append({'统计项':name,'订单数':len(subset),'总金额':subset['金额'].sum(),'平均金额':round(subset['金额'].mean(),2)iflen(subset)>0else0})condition_df=pd.DataFrame(summary_data)condition_df.to_excel(writer,sheet_name='条件统计',index=False)returnoutput_path# 使用df=pd.read_excel(r"C:\Data\sales.xlsx")generate_summary_report(df,r"C:\Data\sales_summary.xlsx")

动态条件统计

defdynamic_summary(df,group_col,value_col,conditions=None):""" 动态条件统计 conditions: dict of {条件名: 筛选条件函数} """# 基础分组统计result=df.groupby(group_col).agg(计数=(value_col,'count'),求和=(value_col,'sum'),平均=(value_col,'mean'),).round(2).reset_index()# 添加条件统计列ifconditions:forcond_name,cond_funcinconditions.items():cond_result=df[cond_func(df)].groupby(group_col)[value_col].sum()result[f'{cond_name}_金额']=result[group_col].map(cond_result).fillna(0)returnresult# 使用df=pd.read_excel(r"C:\Data\sales.xlsx")summary=dynamic_summary(df,group_col='地区',value_col='金额',conditions={'大额':lambdad:d['金额']>10000,'已完成':lambdad:d['状态']=='已完成',})

写入Excel公式版本

importopenpyxldefwrite_sumif_formulas(file_path):"""在Excel中写入SUMIF/COUNTIF公式"""wb=openpyxl.load_workbook(file_path)ws_data=wb['销售数据']ws_summary=wb['统计']# 假设统计表中A列是地区名称,从第2行开始forrowinrange(2,ws_summary.max_row+1):region=ws_summary.cell(row=row,column=1).valueifnotregion:continue# COUNTIF:统计该地区订单数ws_summary.cell(row=row,column=2).value=\f'=COUNTIF(销售数据!B:B,A{row})'# SUMIF:统计该地区总金额ws_summary.cell(row=row,column=3).value=\f'=SUMIF(销售数据!B:B,A{row},销售数据!D:D)'# SUMIFS:该地区已完成订单总金额ws_summary.cell(row=row,column=4).value=\f'=SUMIFS(销售数据!D:D,销售数据!B:B,A{row},销售数据!E:E,"已完成")'wb.save(file_path)

有什么坑

坑1:条件筛选时空值导致报错

金额列有空值,直接比较会报错或结果不对:

# 问题:空值比较df[df['金额']>1000]# NaN参与比较结果为False,不会报错但可能遗漏# 更安全:先处理空值df['金额']=pd.to_numeric(df['金额'],errors='coerce').fillna(0)result=df[df['金额']>1000]# 或者排除空值result=df[df['金额'].notna()&(df['金额']>1000)]

坑2:groupby结果缺少某些分组

某些地区没有数据,groupby后结果里缺少该地区行:

TEMU店群矩阵自动化运营核价报活动

# 问题:只有北京和上海有数据,广州没有result=df.groupby('地区')['金额'].sum()# 结果只有北京和上海# 解决:用reindex补全all_regions=['北京','上海','广州','深圳']result=df.groupby('地区')['金额'].sum().reindex(all_regions,fill_value=0)

坑3:SUMIF公式范围不匹配

写入Excel公式时,条件范围和求和范围行数不一致:

# 错误:条件范围是B列,求和范围是D2:D100ws.cell(row=row,column=3).value='=SUMIF(B:B,A2,D2:D100)'# 范围不一致# 正确:两个范围要一致ws.cell(row=row,column=3).value='=SUMIF(B:B,A2,D:D)'# 都是整列# 或ws.cell(row=row,column=3).value='=SUMIF(B2:B1000,A2,D2:D1000)'# 同范围

坑4:浮点数精度问题

条件求和后金额出现0.00000001的偏差:

# 问题:浮点数精度total=df[df['地区']=='北京']['金额'].sum()# 可能是100000.00000000001# 解决:用roundtotal=round(df[df['地区']=='北京']['金额'].sum(),2)# 或用Decimal处理金额fromdecimalimportDecimal df['金额']=df['金额'].apply(lambdax:Decimal(str(x)))total=df[df['地区']=='北京']['金额'].sum()total=float(total)

坑5:COUNTIF统计中文条件

统计包含中文字符的记录时,编码或全半角不一致导致漏统计:

# 问题:全角和半角括号不一致df['产品名'].str.contains('手机(智能)',na=False)# 只匹配全角括号# 解决:统一全半角后再匹配importunicodedata ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/445d1346fb4b41ab95c21ebf9732287c.png#pic_center)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e9657aa741f344dba6803508734d68ec.png#pic_center)df['产品名']=df['产品名'].astype(str).apply(lambdax:unicodedata.normalize('NFKC',x))count=df['产品名'].str.contains('手机(智能)',na=False).sum()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 23:22:07

Gazebo 机器人仿真避坑 3 要点:模型导入、插件配置与物理参数调优

Gazebo 机器人仿真避坑 3 要点&#xff1a;模型导入、插件配置与物理参数调优在机器人开发领域&#xff0c;仿真环境的重要性不言而喻。Gazebo 作为业界领先的机器人仿真平台&#xff0c;为开发者提供了强大的物理引擎和丰富的传感器模拟能力。然而&#xff0c;在实际使用过程中…

作者头像 李华
网站建设 2026/7/8 23:19:31

ROS 2 Humble 3大仿真平台选型指南:Webots、Gazebo、Stage 性能与易用性实测

ROS 2 Humble 三大仿真平台深度评测&#xff1a;Webots、Gazebo与Stage实战指南 在机器人开发领域&#xff0c;仿真环境的选择往往决定了项目原型的验证效率和最终落地效果。随着ROS 2 Humble版本的普及&#xff0c;开发者面临Webots、Gazebo和Stage三大主流仿真平台的选型难题…

作者头像 李华
网站建设 2026/7/8 23:19:01

Transformer QKV 矩阵与多头注意力:从 PyTorch 代码到 8 头并行计算详解

Transformer QKV 矩阵与多头注意力&#xff1a;从 PyTorch 代码到 8 头并行计算详解在深度学习领域&#xff0c;Transformer 架构已经成为自然语言处理、计算机视觉等多个领域的基石。其核心组件——自注意力机制&#xff08;Self-Attention&#xff09;和多头注意力&#xff0…

作者头像 李华
网站建设 2026/7/8 23:18:33

ENVI 5.6 监督分类对比:极大似然法 vs 最小距离法 vs 支持向量机,3种算法精度与效率实测

ENVI 5.6 监督分类算法实战评测&#xff1a;极大似然法、最小距离法与支持向量机的性能对比1. 遥感影像监督分类的核心挑战当面对一幅包含丰富地物信息的Landsat TM影像时&#xff0c;如何准确区分不同类型的土地覆盖一直是遥感分析的关键问题。监督分类作为最常用的自动化解译…

作者头像 李华
网站建设 2026/7/8 23:18:36

STM32与TPS61170构建高效升压电源方案

1. 项目背景与核心器件选型在嵌入式系统开发中&#xff0c;经常需要将低电压电源转换为更高电压以满足特定外设需求。TPS61170作为德州仪器推出的高压升压转换器&#xff0c;配合STM32L041C6这类低功耗MCU&#xff0c;能够构建高效可靠的电源解决方案。这个组合特别适合便携式设…

作者头像 李华
网站建设 2026/7/8 23:15:17

LSTM vs GRU vs Transformer:3 种模型在时间序列预测上的性能与显存对比

LSTM vs GRU vs Transformer&#xff1a;时间序列预测实战性能对比指南1. 模型选型的关键考量因素在电商销量预测、能源负荷预测等时间序列场景中&#xff0c;模型选型往往面临三大核心矛盾&#xff1a;预测精度、训练效率和资源消耗的平衡。LSTM、GRU和Transformer作为当前主流…

作者头像 李华