• Pandas 多层索引转化为列


    处理原因

    当DataFrame使用分组聚合后,分组的规则会作为索引,如下例。为了便于后续对表格数据的处理和分析,可将索引转化为列。

    数据样式

    # 各地区分店每年的销售额
    sales_area = df.groupby(['Market','Order_Year'])['Sales'].sum()
    # 当前sales_area有多层索引
    sales_area
    

    使用reset_index()函数将索引转换为列

    reset_index()函数

    pandas.DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
    参数:
    level:int,str,tuple,or list,default None
    仅从索引中删除输入的级别,默认删除全部索引
    drop:bool,default False
    不会将删除的索引转化成列,默认是False:转化成列;True:删除的索引直接丢弃,不转化成列
    inplace:bool,defualt False
    是否在原数据上做更改,默认False:不在源数据上做更改,此时有返回值DataFrame需要变量进行赋值;True无返回值
    col_level
    col_fill
    返回值:DataFrame或None(取决于参数inplace的值)

    pandas.Series.reset_index(level=None, drop=False, name=None, inplace=False)
    参数:
    level
    drop
    name:object,str
    对原数据列的列名字进行更改,当drop为False才能使用本参数
    inplace
    当drop为False时,返回DataFrame类型,由于原数据类型是Series,返回值类型和原数据类型不同,故不能在原数据上更改,inplace只能是False;当drop为True时,返回series类型,此时inplace=True可在原数据上更改
    返回值:Series or DataFrame or None(取决于参数drop和inpalce的值)

    错误示例

    # 各地区分店每年的销售额
    sales_area = df.groupby(['Market','Order_Year'])['Sales'].sum()
    # 将索引转化为列
    sales_area.reset_index(inplace=True)
    sales_area
    

    报错:TypeError: Cannot reset_index inplace on a Series to create a DataFrame

    正确转化

    由于返回值是DataFrame类型,原数据是Series类型,故此时不能在原数据上更改。修改如下:

    # 各地区分店每年的销售额
    sales_area = df.groupby(['Market','Order_Year'])['Sales'].sum()
    # 将索引转化为列
    sales_area=sales_area.reset_index()
    sales_area
    

  • 相关阅读:
    BZOJ1058:[ZJOI2007]报表统计(Splay,堆)
    BZOJ3224:普通平衡树(Splay)
    BZOJ3781:小B的询问(莫队)
    21. [HAOI2005] 希望小学 (wa1)
    cogs 2509. 森林大礼包
    libreoj #119. 最短路
    libreoj #514. 「LibreOJ β Round #2」模拟只会猜题意
    cogs 1647. 油田[uva572]
    css的部分应用示例
    html之表格
  • 原文地址:https://www.cnblogs.com/Wendy-r/p/14965489.html
Copyright © 2020-2023  润新知