使用Pandas基于另一列多筛选值匹配某列子串并聚合Count列求和
嘿,我明白你要做的是同时满足两个条件的Count列求和——既要Name列包含指定子串(比如Ehsan),又要Error Name列的值是Device或者Line Error对吧?下面给你整理了几种常用工具的实现方法,按需取用就行:
1. Excel 公式实现
方法一:用SUMIFS函数(推荐,逻辑清晰)
SUMIFS支持多条件求和,这里我们把「Error Name是Device或Line Error」拆成两个并列条件:
=SUMIFS($C$2:$C$100, $A$2:$A$100, "*Ehsan*", $B$2:$B$100, "Device", $B$2:$B$100, "Line Error")
- 替换
$C$2:$C$100为你的Count列实际范围 - 替换
$A$2:$A$100为Name列实际范围 - 替换
$B$2:$B$100为Error Name列实际范围 *是通配符,*Ehsan*表示包含Ehsan的任意文本
方法二:用SUMPRODUCT函数(更灵活,适合复杂逻辑)
如果需要不区分大小写匹配,或者后续要扩展条件,用SUMPRODUCT更方便:
=SUMPRODUCT((ISNUMBER(SEARCH("Ehsan", $A$2:$A$100)))*((($B$2:$B$100="Device")+($B$2:$B$100="Line Error"))>0)*$C$2:$C$100)
SEARCH("Ehsan", ...)不区分大小写查找子串,ISNUMBER判断是否找到(条件1)+(条件2)实现逻辑「或」,>0确保只要满足其中一个就返回True- 各条件相乘相当于逻辑「与」,最后乘以Count列得到求和结果
2. Python Pandas 实现
假设你的数据已经加载到DataFrame df中,代码如下:
# 筛选同时满足两个条件的行 filtered_rows = df[ df['Name'].str.contains('Ehsan', case=False) # Name包含Ehsan(不区分大小写) & df['Error Name'].isin(['Device', 'Line Error']) # Error Name是指定值之一 ] # 对筛选后的Count列求和 total_count = filtered_rows['Count'].sum() print(f"符合条件的Count总和为:{total_count}")
- 去掉
case=False即可开启严格大小写匹配 isin()方法比多个==用|连接更简洁,适合多值匹配场景
3. SQL 实现
假设你的数据存储在表error_records中,字段分别为name、error_name、count,SQL查询语句如下:
SELECT SUM(count) AS total_matching_count FROM error_records WHERE name LIKE '%Ehsan%' AND error_name IN ('Device', 'Line Error');
LIKE '%Ehsan%'匹配所有包含Ehsan的name值(SQL默认区分大小写,忽略大小写可根据数据库调整:MySQL用LIKE BINARY '%Ehsan%',PostgreSQL用ILIKE '%Ehsan%')IN ('Device', 'Line Error')等价于error_name = 'Device' OR error_name = 'Line Error',写法更简洁
内容的提问来源于stack exchange,提问作者Filbadeha
相关产品推荐
相关产品推荐

