一、透视表(pivotTab)


透视表就是将指定原有DataFrame的列分别作为行索引和列索引,然后对指定的列应用聚集函数(默认情况下式mean函数)。**

  1. df = DataFrame({'类别':['水果','水果','水果','蔬菜','蔬菜','肉类','肉类'],
  2. '产地':['美国','中国','中国','中国','新西兰','新西兰','美国'],
  3. '水果':['苹果','梨','草莓','番茄','黄瓜','羊肉','牛肉'],
  4. '数量':[5,5,9,3,2,10,8],
  5. '价格':[5,5,10,3,3,13,20]})
  6. print(df)
  1. 产地 价格 数量 水果 类别
  2. 0 美国 5 5 苹果 水果
  3. 1 中国 5 5 水果
  4. 2 中国 10 9 草莓 水果
  5. 3 中国 3 3 番茄 蔬菜
  6. 4 新西兰 3 2 黄瓜 蔬菜
  7. 5 新西兰 13 10 羊肉 肉类
  8. 6 美国 20 8 牛肉 肉类

1.按‘产地’和‘类别’重新索引,然后在‘价格’和‘数量’上执行mean函数

  1. print(df.pivot_table(index=['产地','类别']))
  2. 价格 数量
  3. 产地 类别
  4. 中国 水果 7.5 7.0
  5. 蔬菜 3.0 3.0
  6. 新西兰 肉类 13.0 10.0
  7. 蔬菜 3.0 2.0
  8. 美国 水果 5.0 5.0
  9. 肉类 20.0 8.0


  1. print(df.pivot_table(columns=['产地','类别']))
  2. 产地 类别
  3. 价格 中国 水果 7.5
  4. 蔬菜 3.0
  5. 新西兰 肉类 13.0
  6. 蔬菜 3.0
  7. 美国 水果 5.0
  8. 肉类 20.0
  9. 数量 中国 水果 7.0
  10. 蔬菜 3.0
  11. 新西兰 肉类 10.0
  12. 蔬菜 2.0
  13. 美国 水果 5.0
  14. 肉类 8.0
  15. dtype: float64

2.行索引为‘产地’,列索引为‘类别’,

对‘价格’应用‘max’函数,并提供分项统计,缺失值填充0

  1. print(df.pivot_table('价格',index='产地',columns='类别',aggfunc='max',margins=True,fill_value=0))
  2. 类别 水果 肉类 蔬菜 All
  3. 产地
  4. 中国 10.0 0.0 3.0 10.0
  5. 新西兰 0.0 13.0 3.0 13.0
  6. 美国 5.0 20.0 0.0 20.0
  7. All 10.0 20.0 3.0 20.0

二、交叉表(crossTab)

交叉表是用于统计分组频率的特殊透视表

  1. print(pd.crosstab(df['类别'],df['产地'],margins=True)) # 按类别分组,统计各个分组中产地的频数
  2. 产地 中国 新西兰 美国 All
  3. 类别
  4. 水果 2 0 1 3
  5. 肉类 0 1 1 2
  6. 蔬菜 1 1 0 2
  7. All 3 2 2 7