DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

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

下载推广海报

圈内讨论推广海报

《groupby 分组聚合怎么用?分组后怎么恢复成普通 DataFrame?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。