如何在Python中对多列按行实现SUMIF与COUNTIF功能
实现按列索引的条件计数与求和(类似Excel COUNTIF/SUMIF)
核心思路
由于表头不固定,我们通过0-based列索引指定目标列(Excel的第2列对应pandas的索引1,第4列对应索引3,以此类推,直到第18列对应索引17),然后对这些列逐行应用条件统计。
步骤代码实现
假设你已经用pandas读取了Excel文件,得到DataFrame对象df:
1. 定义目标列索引
先列出需要统计的列的索引(0-based):
# 对应Excel的第2、4、6...18列 target_col_indices = list(range(1, 19, 2)) # 生成[1,3,5,...,17]
2. 实现条件计数(等价于Excel COUNTIF)
统计每行中目标列里≥0.05的数值数量:
# 先筛选出目标列,再判断每个值是否≥0.05,最后按行求和(True=1,False=0) df['count_ge_0.05'] = df.iloc[:, target_col_indices].ge(0.05).sum(axis=1)
iloc[:, target_col_indices]:通过索引选取目标列ge(0.05):等价于>=0.05,返回布尔值矩阵sum(axis=1):按行求和,得到每行符合条件的数量
3. 实现条件求和(等价于Excel SUMIF)
对每行中目标列里≥0.05的数值求和:
# 先筛选目标列,将不符合条件的值替换为0,再按行求和 df['sum_ge_0.05'] = df.iloc[:, target_col_indices].where(df.iloc[:, target_col_indices] >= 0.05, 0).sum(axis=1)
where(condition, 0):保留符合条件的值,不符合的替换为0sum(axis=1):按行求和得到符合条件的数值总和
处理非数值列(可选)
如果目标列存在非数值数据,先转换为数值类型(无法转换的设为NaN,不参与统计):
# 转换目标列为数值类型 numeric_target_cols = df.iloc[:, target_col_indices].apply(pd.to_numeric, errors='coerce') # 再进行计数和求和 df['count_ge_0.05'] = numeric_target_cols.ge(0.05).sum(axis=1) df['sum_ge_0.05'] = numeric_target_cols.where(numeric_target_cols >= 0.05, 0).sum(axis=1)
内容的提问来源于stack exchange,提问作者Samuel Sam
相关产品推荐
相关产品推荐

