• 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
    

  • 相关阅读:
    NetCore使用Log4Net记录日志
    WCF数据协议中XmlArrayItem标签不起作用的问题
    WTM Blazor,Blazor开发利器
    WTM5.0发布,全面支持.net5
    log4netdemo
    mes 入库单号 锁表方案
    线程基础篇-线程同步
    线程基础篇-线程和进程
    EF基础篇-Code First
    EF基础篇-DB First
  • 原文地址:https://www.cnblogs.com/Wendy-r/p/14965489.html
Copyright © 2020-2023  润新知