zoukankan      html  css  js  c++  java
  • Python学习笔记:行列转换之pandas.melt函数

    一、介绍

    数据分析中经常需要进行“行列转化”。

    pandas.melt() 函数可以实现将 “宽数据” → “长数据”的一种列转行变换。

    类似于 Excel 中的透视表(pivot)和逆透视表的操作。

    可选择地保留设置的标识符变量。

    1. 使用语法

    pandas.melt(frame,
               id_vars=None,
               value_vars=None,
               var_name=None,
               value_name='value',
               col_level=None,
               ignore_index=True)
    

    2.参数解释

    frame -- 要处理的数据框 DataFrame
    id_vars -- 不需要被转换的列名
    value_vars -- 需要转换的列名 默认剩余全部
    var_name、value_name -- 自定义设置对应的列名
    ignore_index -- 是否忽略原始索引
    col_level -- 多层索引 MultiIndex
    

    二、实操

    1.构建测试数据集

    import pandas as pd
    df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
                       'B': {0: 1, 1: 3, 2: 5},
                       'C': {0: 2, 1: 4, 2: 6}
                       })
    df
    '''
       A  B  C
    0  a  1  2
    1  b  3  4
    2  c  5  6
    '''
    

    2.默认转换

    pd.melt(df, id_vars=['A'], value_vars=['B'])
    '''
       A variable  value
    0  a        B      1
    1  b        B      3
    2  c        B      5
    '''
    
    pd.melt(df, id_vars=['A'], value_vars=['B', 'C'])
    '''
       A variable  value
    0  a        B      1
    1  b        B      3
    2  c        B      5
    3  a        C      2
    4  b        C      4
    5  c        C      6
    '''
    

    3.设置列名

    pd.melt(df, id_vars=['A'], value_vars=['B'],
            var_name='myVarName', value_name='myValueName')
    '''
       A myVarName  myValueName
    0  a         B            1
    1  b         B            3
    2  c         B            5
    '''
    

    4.忽略索引

    pd.melt(df, id_vars=['A'], value_vars=['B', 'C'],
            ignore_index=False)
    '''
       A variable  value
    0  a        B      1
    1  b        B      3
    2  c        B      5
    0  a        C      2
    1  b        C      4
    2  c        C      6
    '''
    

    5.多重索引

    # 多重索引
    df.columns = [list('ABC'), list('DEF')]
    df
    '''
       A  B  C
       D  E  F
    0  a  1  2
    1  b  3  4
    2  c  5  6
    '''
    
    # 选择最外层索引
    pd.melt(df, col_level=0, id_vars=['A'], value_vars=['B'])
    '''
       A variable  value
    0  a        B      1
    1  b        B      3
    2  c        B      5
    '''
    
    # 选择内层索引
    pd.melt(df, col_level=1, id_vars=['D'], value_vars=['E'])
    
    # 选择复合索引
    pd.melt(df, id_vars=[('A', 'D')], value_vars=[('B', 'E')])
    '''
      (A, D) variable_0 variable_1  value
    0      a          B          E      1
    1      b          B          E      3
    2      c          B          E      5
    '''
    

    三、逆操作

    可以使用 pivot 透视的操作,来解压缩一个 DataFrame 对象。

    df.pivot(index='col1', columns='col2')
    

    参考链接:Pandas 的melt的使用

    参考链接:pandas.melt

    参考链接:pandas函数-melt

    参考链接:pandas.melt()详解

  • 相关阅读:
    tectangular container
    WIFI
    微信小程序动态改变数组或对象中的某个属性值
    常用的正则表达式
    前端登录通过账号显示对应头像
    JS返回页面时自动回滚到历史浏览位置
    JavaScript让登录或搜索文本框自动获得焦点
    react脚手架应用
    npm教程3_脚手架原理以及bootstrap引入
    npm教程2
  • 原文地址:https://www.cnblogs.com/hider/p/15769238.html
Copyright © 2011-2022 走看看