
天天在 Excel 里做的三件事
打开一张销售明细,财务最常做的无非三个动作:筛出符合条件的、按某列排个序、再求和看个总数。
在 Excel 里这是点筛选按钮、点排序、拉 SUM。在 pandas 里,每个动作就是一行代码——而且几十张表都能一键重跑。这一篇把这三件事讲透,它们是后面所有分析的基础积木。

筛选:把符合条件的挑出来
最基本的,挑出“金额大于 5 万”的大额订单:
import pandas as pddf = pd.read_excel("销售明细.xlsx")big = df[df["金额"] > 50000]print(big)
多个条件叠加,比如“华东区且大于 5 万”:
big_east = df[(df["区域"] == "华东") & (df["金额"] > 50000)]几种特别常用的筛选写法,记住能省很多事:
金额在某个区间(含两端)df[df["金额"].between(10000, 50000)]客户是这几个里的任意一个(相当于 Excel 里勾选多个)df[df["客户"].isin(["云栖餐饮", "广发包装"])]客户名里"包含"某个字(模糊筛选)df[df["客户"].str.contains("科技")]反向筛选:不满足条件的,前面加 ~df[~df["客户"].isin(["云栖餐饮"])]
排序:按某列从高到低
df.sort_values("金额", ascending=False)按多列排序也很常用,比如“先按区域分,再在每个区域里按金额从高到低”:
df.sort_values(["区域", "金额"], ascending=[True, False])只想看“最高/最低的几笔”,有更直接的写法,不用先排序再 head:
df.nlargest(3, "金额") # 金额最高的 3 笔df.nsmallest(3, "金额") # 金额最低的 3 笔
求和与分组汇总:SUMIF 的升级版
整列求和:
print(df["金额"].sum())print(df.groupby("客户")["金额"].sum())一次算好几个指标,用 agg:
print(df.groupby("区域")["金额"].agg(["sum", "mean", "count"]))按多个维度分组也行,比如“区域 + 月份”:
print(df.groupby(["区域", "月份"])["金额"].sum())顺手:新增一个计算列
筛选汇总之外,经常还要“算一列”。比如给金额加上 13% 的税:
df["含税金额"] = df["金额"] * 1.13⚠️ 避坑
KeyError:列名写错了。先 print(df.columns) 看真实列名,复制粘贴别手打。
多条件不生效:忘了给每个条件加括号,或把 & 写成了 and(pandas 里要用 & / |)。
str.contains 报错:那一列里有空值。加个参数 na=False 跳过空值:df["客户"].str.contains("科技", na=False)。
筛选对不上、值看着一样却选不中:列里有看不见的空格。先 df["客户"] = df["客户"].str.strip()(第 10 篇细讲)。
小作业
拿你自己的一张表,把这几件事都做一遍:
用 between 或 isin 做一次稍复杂的筛选; 按两列排序,或用 nlargest 看前几名; 用 groupby(...).agg(["sum","count"]) 算出每个类别的合计和笔数; 新增一个计算列(比如税额、单价、占比)。

📌 完整代码 + 示例数据怎么拿?
本篇代码和脱敏示例数据都已开源。关注公众号「不是一条狗」,回复关键词 github地址,即可获取完整代码仓库链接。

下一篇
《多表 VLOOKUP 的 Python 版(merge)》——两张表怎么按客户名拼到一起,告别 VLOOKUP 的 #N/A。
夜雨聆风