zoukankan      html  css  js  c++  java
  • 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
    

  • 相关阅读:
    浏览器内核、webview内核
    移动端(h5)页面适配
    vue 开发多页面应用
    git 指令
    joomla多语言建站之默认前台语言设置
    初识node,原理与浏览器何其相似
    vue-cli下配置项目访问ip和服务器ip
    js中不容小觑的var声明
    vue中的事件监听之——v-on vs .$on
    用js的eval函数模拟Web API中的onclick事件
  • 原文地址:https://www.cnblogs.com/Wendy-r/p/14965489.html
Copyright © 2011-2022 走看看