GroupBy、聚合与数据透视表
使用分组操作和数据透视表汇总数据。
GroupBy、聚合与数据透视表 是 CoddyKit 上的免费 Python Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
groupby 基础
df.groupby("col") 会按照该列的唯一值将 DataFrame 拆分为多个组。链式调用聚合操作即可获得结果。
import pandas as pd
df = pd.DataFrame({
"dept":["HR","IT","HR","IT","HR"],
"salary":[60,80,65,90,70]
})
print(df.groupby("dept")["salary"].mean())
# HR 65.0
# IT 85.0多个聚合函数
使用 agg() 一次应用多个聚合函数。
import pandas as pd
df = pd.DataFrame({"dept":["HR","IT","HR","IT"],"sal":[60,80,65,90]})
result = df.groupby("dept")["sal"].agg(["mean","max","count"])
print(result)命名聚合
在 agg() 中使用关键字参数,明确命名输出列(Pandas 0.25 及更高版本)。
import pandas as pd
df = pd.DataFrame({"dept":["HR","IT","HR","IT"],"sal":[60,80,65,90]})
result = df.groupby("dept").agg(
avg_sal=("sal","mean"),
max_sal=("sal","max"),
count=("sal","size")
)
print(result)对多列使用 groupby
传入列的列表即可创建层次化分组。
import pandas as pd
df = pd.DataFrame({
"year":[2023,2023,2024,2024],
"dept":["HR","IT","HR","IT"],
"sal":[60,80,65,90]
})
print(df.groupby(["year","dept"])["sal"].sum())transform()
transform 返回一个与原始索引对齐的 Series,适合将组级统计数据添加回原始 DataFrame。
import pandas as pd
df = pd.DataFrame({"dept":["HR","IT","HR","IT"],"sal":[60,80,65,90]})
df["dept_avg"] = df.groupby("dept")["sal"].transform("mean")
print(df)filter()
filter(func) 只保留函数返回 True 的组。
import pandas as pd
df = pd.DataFrame({"dept":["HR","IT","HR"],"sal":[60,80,65]})
# Keep only departments with mean salary > 70:
result = df.groupby("dept").filter(lambda g: g["sal"].mean() > 70)
print(result)pivot_table
pd.pivot_table 会创建类似电子表格的汇总表,并支持自定义聚合。
import pandas as pd
df = pd.DataFrame({
"year":[2023,2023,2024,2024],
"region":["East","West","East","West"],
"sales":[100,150,120,200]
})
pt = pd.pivot_table(df, values="sales",
index="year", columns="region",
aggfunc="sum")
print(pt)crosstab
pd.crosstab 会计算交叉表,适合统计分类值组合的数量。
import pandas as pd
df = pd.DataFrame({"gender":["M","F","M","F","M"],"result":["pass","pass","fail","fail","pass"]})
print(pd.crosstab(df["gender"], df["result"]))apply()
apply(func) 会将自定义函数应用于每个组的 DataFrame(axis=0),或应用于每一行/列(axis=1)。
import pandas as pd
df = pd.DataFrame({"dept":["HR","IT","HR"],"sal":[60,80,65]})
def range_sal(g):
return g["sal"].max() - g["sal"].min()
print(df.groupby("dept").apply(range_sal))使用 unstack() 重塑数据
多级 groupby 之后,使用 unstack() 将最内层的索引级别移到列中。
import pandas as pd
df = pd.DataFrame({"year":[2023,2023,2024],"dept":["HR","IT","HR"],"sal":[60,80,65]})
result = df.groupby(["year","dept"])["sal"].mean().unstack()
print(result)对时间序列进行重采样
resample("M") 按日历周期对时间序列 DataFrame 分组,从而可以进行按月或按年的聚合。
import pandas as pd
idx = pd.date_range("2024-01-01", periods=90, freq="D")
df = pd.DataFrame({"sales": range(90)}, index=idx)
monthly = df.resample("ME").sum()
print(monthly)快速检查
groupby().transform("mean") 返回什么?
回顾
groupby 会将数据拆分为多个组以进行聚合。使用 agg() 应用多个函数,使用 transform() 将组统计数据广播回原数据,使用 filter() 删除组,并使用 pivot_table()/crosstab() 生成跨维度汇总。
常见问题解答
「GroupBy、聚合与数据透视表」课时是免费的吗?
是的 — 「GroupBy、聚合与数据透视表」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「GroupBy、聚合与数据透视表」这节课中我会学到什么?
使用分组操作和数据透视表汇总数据。 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「GroupBy、聚合与数据透视表」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Series 与 DataFrame 基础
- 索引、筛选与布尔掩码
- GroupBy、聚合与数据透视表
- 合并、连接与数据清洗