pandas数据透视表pivot_table

简介

类似excel的数据透视表功能,pandas提供了pivot_table和pivot实现数据透视表的功能,具体过程是:分组→聚合→展示。

1、pivot_table()数据透视+聚合

语法: pandas.pivot_table(data, index=None, columns=None, values=None, aggfunc=‘mean’, fill_value=None, dropna=True, margins=False, margins_name=‘All’, observed=False)
Parameters:

  • data: DataFrame
  • index: column, Grouper, array, or list of the previous。指定放在行索引的列,类似excel数据透视表的“行”。
  • columns: column, Grouper, array, or list of the previous。指定放在列索引的列,类似excel数据透视表的”列”。
  • values: column to aggregate, optional。要计算的列,求和、计数、均值等,类似excel的”值”。
  • aggfunc: function, list of functions, dict, default numpy.mean。指定要对values进行的运算,如果values是多列,dict可分别为其指定计算方式。
  • fill_value: scalar, default None. Value to replace missing values with.
  • dropna: boolean, default True。剔除透视后全是NaN的列。
  • margins: boolean, default False。是否添加汇总列,excel数据透视表默认添加。
  • margins_name: string, default ‘All’. Name of the row / column that will contain the totals when margins is True.
df = pd.DataFrame({'学校':['一中', '一中', '一中', '一中', '一中', '一中', '一中', '一中', '一中', '一中', '二中', '二中', '二中', '二中', '二中', '二中'],
                  '班级':['1班', '1班', '1班', '1班', '1班', '1班', '2班', '2班', '2班', '3班', '1班', '1班', '1班', '2班', '2班', '2班'],
                  '组别':['1组', '1组', '2组', '2组', '2组', '2组', '1组', '2组', '3组', '1组', '1组', '1组', '2组', '1组', '1组', '2组'],
                  '姓名':['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'],
                  '身高':[165, 165, 160, 160, 160, 160, 158, 150, 157, 170, 175, 175, 180, 176, 176, 177],
                  '体重':[45, 45, 55, 55, 55, 55, 54, 46, 60, 65, 70, 70, 75, 73, 73, 76],
                  '数学成绩':[65, 65, 75, 75, 75, 75, 74, 66, 80, 85, 90, 90, 95, 93, 93, 96]})

df
Out[57]: 
    学校  班级  组别 姓名   身高  体重  数学成绩
0   一中  11组  a  165  45    65
1   一中  11组  b  165  45    65
2   一中  12组  c  160  55    75
3   一中  12组  d  160  55    75
4   一中  12组  e  160  55    75
5   一中  12组  f  160  55    75
6   一中  21组  g  158  54    74
7   一中  22组  h  150  46    66
8   一中  23组  i  157  60    80
9   一中  31组  j  170  65    85
10  二中  11组  k  175  70    90
11  二中  11组  l  175  70    90
12  二中  12组  m  180  75    95
13  二中  21组  n  176  73    93
14  二中  21组  o  176  73    93
15  二中  22组  p  177  76    96

pd.pivot_table(df, index=['学校', '班级'], columns=['组别'], values=['身高', '体重'], aggfunc={'身高':'sum', '体重':['max', 'min']}, fill_value='missing')
#结果见下:

结果展示

2、pivot()数据透视,不支持聚合

语法: pandas.pivot(data, index=None, columns=None, values=None)
参数说明: 与pivot_table类似

  • data: DataFrame
  • index: string or object, optional
  • columns: string or object
  • values: string, object or a list of the previous, optional
 df = pd.DataFrame({"foo": ['one', 'one', 'two', 'two'],
                    "bar": ['A', 'A', 'B', 'C'],
                    "baz": [1, 2, 3, 4]})
df
Out[69]: 
   foo bar  baz
0  one   A    1
1  one   A    2
2  two   B    3
3  two   C    4

df.pivot(index='foo', columns='bar', values='baz')
Traceback (most recent call last):
...
ValueError: Index contains duplicate entries, cannot reshape
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值