如何用Pandas实现跨两个数据集的Excel SUMIFS函数?
Pandas实现跨工作表的SUMIFS多条件求和
先明确Excel原公式逻辑
你的Excel公式 =SUMIFS('Sheet_1'!$D:$D, 'Sheet_2'!$A:$A,">"&'Some_Value', 'Sheet_2'!$B:$B,"<="&'Some_Value_2') 核心逻辑是:
仅当Sheet_2中同一行的A列值大于
Some_Value,且B列值小于等于Some_Value_2时,将Sheet_1对应行的D列值计入求和结果。
注:Excel的SUMIFS默认按行对齐条件区域与求和区域,要求两个工作表的行数一致,否则会按最短表的行数匹配。
Pandas实现方案
1. 读取工作表数据
先把两个工作表读取为Pandas DataFrame:
import pandas as pd # 替换为你的实际文件路径 sheet1 = pd.read_excel("your_excel_file.xlsx", sheet_name="Sheet_1") sheet2 = pd.read_excel("your_excel_file.xlsx", sheet_name="Sheet_2")
2. 方案一:布尔索引直接计算(最直观)
先基于Sheet_2生成条件掩码,再用掩码筛选Sheet_1的目标列求和:
# 替换为你的实际条件值 some_value = 10 some_value_2 = 20 # 创建条件掩码:Sheet_2中满足条件的行标记为True condition_mask = (sheet2["A"] > some_value) & (sheet2["B"] <= some_value_2) # 筛选Sheet_1中对应行的D列并求和 total_sum = sheet1.loc[condition_mask, "D"].sum()
3. 方案二:合并后用df.query(延续你熟悉的用法)
如果习惯用df.query(),可以先将两个表按行索引对齐合并,再执行查询求和:
# 按行索引合并两个表(保证行对齐) combined_df = pd.concat([sheet1, sheet2], axis=1) # 使用query筛选并求和 total_sum = combined_df.query("A > @some_value and B <= @some_value_2")["D"].sum()
特殊情况:工作表通过关联键匹配
如果两个工作表不是按行索引对齐,而是通过某个共同字段(比如ID)关联,需要先合并再计算:
# 按关联键合并两个表(假设共同键为"ID") merged_df = pd.merge(sheet1, sheet2, on="ID") # 筛选条件并求和 total_sum = merged_df.query("A > @some_value and B <= @some_value_2")["D"].sum()
关键注意事项
- 若使用行对齐方式,必须确保Sheet_1和Sheet_2的行数完全一致,且每行是对应的记录,否则结果会出错。
- 若工作表有大量数据,建议避免使用整列(如Excel中的
$D:$D),而是指定具体数据范围,提升Pandas运行效率。
内容的提问来源于stack exchange,提问作者Prashant Yadav
相关产品推荐
相关产品推荐

