• 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
    

  • 相关阅读:
    4:4 自定义拦截器
    DDD学习笔记一
    Winform/WPF国际化处理
    NPOI 操作Excel
    将输入的字符串进行大写格式化
    将输入的字符串分2个字符添加空格并大写格式化
    VS使用技巧
    NotifyIcon用法
    C#Winfrom系统打印机调用/设置默认打印机
    TextBox(只允许输入字母或者数字)——重写控件
  • 原文地址:https://www.cnblogs.com/Wendy-r/p/14965489.html
Copyright © 2020-2023  润新知