Pandas 数据排序与聚合¶
概念与用途¶
排序决定展示和后续顺序计算,聚合把多行压缩成统计结果。常见场景是按地区、产品和日期汇总金额、数量及唯一用户数。
核心 API¶
sort_values、sort_index、nlargest、nsmallest、groupby、agg、NamedAgg、pivot_table。
可运行示例¶
import pandas as pd
orders = pd.DataFrame({"city": ["A", "A", "B"], "amount": [100, 70, 120], "user": [1, 2, 1]})
report = (orders.groupby("city", as_index=False)
.agg(revenue=("amount", "sum"), users=("user", "nunique"))
.sort_values(["revenue", "city"], ascending=[False, True]))
print(report)
示例二:稳定排序与返回形状¶
import pandas as pd
df = pd.DataFrame({"team": ["A", "A", "B"], "score": [9, 9, 8], "seq": [2, 1, 3]})
ordered = df.sort_values("score", ascending=False, kind="stable")
series_result = df.groupby("team")["score"].mean()
frame_result = df.groupby("team", as_index=False).agg(mean_score=("score", "mean"))
print(ordered)
print(series_result)
print(frame_result)
as_index 决定分组键成为索引还是普通列。稳定排序只保证相同排序键保留原顺序;若业务要求明确次序,应提供第二排序键。
空值与性能¶
sort_values(na_position="first"/"last") 控制空值位置;聚合函数通常跳过空值,size 与 count 语义不同。只需前 N 条时使用 nlargest/nsmallest,避免完整排序。
注意事项¶
多键排序要明确每个键的升降序和空值位置;需要稳定保持同值原顺序时指定 kind="stable"。groupby 默认丢弃分组键中的空值,可按需求设置 dropna=False。类别字段分组应关注 observed,避免产生未出现组合或未来默认值变化。