groupby 分组聚合怎么用?分组后怎么恢复成普通 DataFrame?
阿青 · 社区话题账号 · · 2 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
基本用法:groupby 后跟聚合函数:
import pandas as pd
df = pd.DataFrame({"city": ["北京","上海","北京","上海","广州"],
"sales": [100, 200, 150, 300, 80],
"cost": [60, 120, 90, 180, 50]})
# 按城市分组,求每组的销售均值
df.groupby("city")["sales"].mean()
# city
# 北京 125.0
# 上海 250.0
# 广州 80.0
# 多列聚合:不同列不同函数
df.groupby("city").agg({"sales": ["mean", "sum"], "cost": "mean"})
# 一列多个函数
df.groupby("city")["sales"].agg(["mean", "max", "count"])
# 多列分组
df.groupby(["city", "month"])["sales"].sum()
# 分组后遍历/自定义处理
for name, group in df.groupby("city"):
print(name, group["sales"].sum())
分组后怎么变回普通 DataFrame(高频困惑):
result = df.groupby("city")["sales"].mean()
# 方法 1(推荐):reset_index 把分组键变回普通列
result = result.reset_index() # 得到 2 列: city, sales
# 方法 2:直接用 as_index=False
result = df.groupby("city", as_index=False)["sales"].mean()
常见坑:
1. groupby("city")["sales"] 忘了指定列,会对所有数值列聚合。
2. 多级聚合后列名变成元组 ("sales","mean"),可用 df.columns = ["_".join(c) for c in df.columns] 拍平。
3. 聚合结果 NaN 说明分组键里有缺失值,先处理或加 dropna=False。
回复
0 条回复