• pd.pivot_table 透视表


    实现透视表功能

    参数如下:

    pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)

    参数解释:

    data:df

    values:要被聚合的列,可选

    index:可以是列,也可以是和df长度一样的array,这个索引就是我们横向维度,如果是多个维度使用list表达

    colums:可以是列,是我们纵向的维度,如果是多个维度使用list表达

    aggfunc:function, list of functions, dict, default numpy.mean,我们可以np.sum(),或者其他函数

    fill_value:替换缺失值的值(在汇总后生成的数据透视表中)

    margins:边距bool,默认为False,添加所有行/列(例如,小计/总计)

    dropna: bool,默认为True,不要包括所有条目均为NaN的列。

    margins_name: str,默认为“全部”,当margins为True时将包含总计的行/列的名称。

    observed:观察到的布尔值,默认为False,仅当任何石斑鱼是分类者时才适用。如果为True:仅显示分类石斑鱼的观测值。如果为False:显示分类石斑鱼的所有值。

    补充一些:

    1.官网:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot_table.html

    2.网上有一篇博客写得比较好:https://www.cnblogs.com/Yanjy-OnlyOne/p/11195621.html

    ndex就是层次字段,要通过透视表获取什么信息就按照相应的顺序设置字段

    而Values可以对需要的计算数据进行筛选

    aggfunc参数可以设置我们对数据聚合时进行的函数操作

    Columns类似Index可以设置列层次字段,它不是一个必要参数,作为一种分割数据的可选方式

    例子

    df = pd.DataFrame({"A": ["foo", "foo", "foo", "foo", "foo",
                             "bar", "bar", "bar", "bar"],
                       "B": ["one", "one", "one", "two", "two",
                             "one", "one", "two", "two"],
                       "C": ["small", "large", "large", "small",
                             "small", "large", "small", "small",
                             "large"],
                       "D": [1, 2, 2, 3, 3, 4, 5, 6, 7],
                       "E": [2, 4, 5, 5, 6, 6, 8, 9, 9]})
    df
         A    B      C  D  E
    0  foo  one  small  1  2
    1  foo  one  large  2  4
    2  foo  one  large  2  5
    3  foo  two  small  3  5
    4  foo  two  small  3  6
    5  bar  one  large  4  6
    6  bar  one  small  5  8
    7  bar  two  small  6  9
    8  bar  two  large  7  9

    求和来汇总值

    table = pd.pivot_table(df, values='D', index=['A', 'B'],
                        columns=['C'], aggfunc=np.sum)
    table
    C        large  small
    A   B
    bar one    4.0    5.0
        two    7.0    6.0
    foo one    4.0    1.0
        two    NaN    6.0

    使用fill_value参数填充缺少的值

    table = pd.pivot_table(df, values='D', index=['A', 'B'],
                        columns=['C'], aggfunc=np.sum, fill_value=0)
    table
    C        large  small
    A   B
    bar one      4      5
        two      7      6
    foo one      4      1
        two      0      6

    取多个列的平均值进行汇总

    table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],
                        aggfunc={'D': np.mean,
                                 'E': np.mean})
    table
                    D         E
    A   C
    bar large  5.500000  7.500000
        small  5.500000  8.500000
    foo large  2.000000  4.500000
        small  2.333333  4.333333


    任何给定的值列计算多种类型的汇总
    table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],
                        aggfunc={'D': np.mean,
                                 'E': [min, max, np.mean]})
    table
                   D    E
                mean  max      mean  min
    A   C
    bar large  5.500000  9.0  7.500000  6.0
        small  5.500000  9.0  8.500000  8.0
    foo large  2.000000  5.0  4.500000  4.0
        small  2.333333  6.0  4.333333  2.0

    补充一点,如果要计算费数字型的计算也就是count,可以这样子使用
    # Filter on 'Win'; make pivot table 
    df[df.Result == 'Win'].pivot_table(index = 'Name', 
                values = ['Result', 'Speed'], 
                aggfunc = {'Result' : 'count', 
                   'Speed' : 'mean'}, 
                fill_value = 0).rename(columns = {'Result' : 'Win'}) 

    当然你也可以使用groupby的agg 

    #或者GROUPBY和聚合:
    
    # groupby.agg() 
    df[df.Result == 'Win'].groupby('Name').agg({'Result' : 'count', 
                  'Speed' : 'mean'}).rename({'Result' : 'Win'}) 
     
  • 相关阅读:
    痛苦之旅——安装Eric4
    如何把自己写的python程序给别人用
    (转)史上最好的Python线程指南
    (转)python编码问题
    Beautiful Soup的一些中文资料
    oracle监听配置
    redhat6.5安装oracle 11g
    《深入浅出MFC》– Document-View深入探讨
    CAS解扰小结
    ts包、表、子表、section的关系
  • 原文地址:https://www.cnblogs.com/cgmcoding/p/13922451.html
Copyright © 2020-2023  润新知