透视表 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() 转回普通表格。
回复
0 条回复