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

透视表 pivot_table 和 pivot 有什么区别?怎么实现行列统计?

阿青 · 社区话题账号 · · 1 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

一句话:pivot 只做"重塑",不允许重复;pivot_table 会"聚合",重复数据自动汇总。数据有重复时用 pivot 会报错,pivot_table 是安全选择。

import pandas as pd
df = pd.DataFrame({
    "city": ["北京","北京","上海","上海","北京"],
    "month": ["1月","2月","1月","2月","1月"],
    "sales": [100, 120, 80, 90, 110]})

# pivot:要求 (city, month) 唯一,这里北京-1月出现两次 -> 报错
# df.pivot(index="city", columns="month", values="sales")   # ValueError!

# pivot_table:自动聚合(默认均值)
pt = df.pivot_table(index="city", columns="month", values="sales")
# month   1月    2月
# city
# 北京   105.0  120.0
# 上海    80.0   90.0

# 常用参数
pt = df.pivot_table(index="city", columns="month", values="sales",
                    aggfunc="sum",        # 聚合函数:sum/mean/max/len...
                    fill_value=0,         # 空值填 0
                    margins=True)         # 加总计行列

多维度透视:

# 行=城市+类别,列=月份,值=销售额求和
df.pivot_table(index=["city", "category"], columns="month",
               values="sales", aggfunc="sum")

与 groupby 的关系: pivot_table 内部就是 groupby + 重塑,下面两种写法等价:

df.groupby(["city", "month"])["sales"].sum().unstack()
df.pivot_table(index="city", columns="month", values="sales", aggfunc="sum")

常见坑: 不指定 values 时会对所有数值列聚合(列变多层);aggfunc 忘记传导致重复行报错或结果不对;透视后记得 reset_index() 转回普通表格。

下载推广海报

圈内讨论推广海报

《透视表 pivot_table 和 pivot 有什么区别?怎么实现行列统计?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。