详解pandas.DataFrame.unstack()(将序列展开为数据框)函数使用方法

  • Post category:Python

pandas.DataFrame.unstack()pandas包中DataFrame对象的一个重要方法,可以将指定的行索引(index)的多个层级解除堆叠,将数据从多维变为二维,方便进行数据清洗和分析。下面为大家介绍该方法的使用方法及示例。

方法的作用

pandas.DataFrame.unstack()方法可以将多层次索引的DataFrame对象的内层行索引(MultiIndex)“旋转”到列方向,形成一个新的DataFrame对象。比如,将包含多个指标的决算报表的数据行索引从多层次索引转换为单层行索引,方便进行数据分析和可视化。

方法的参数

pandas.DataFrame.unstack()方法有若干个参数,其中最重要的三个参数如下:

  • level: 用于指定需要解除的行索引层级,支持指定多个层级;

  • fill_value: 用于指定缺失值的替换值,默认为NaN;

  • dropna: 用于控制是否删除生成数据中的缺失值,默认为False,即保留缺失值。

方法的使用方法

下面给大家介绍几个常见的使用场景和示例:

示例1:将多层次行索引的DataFrame“旋转”为单层行索引

import pandas as pd

data = {'国家': ['中国', '中国', '美国', '美国', '日本', '日本'],
        '性别': ['男', '女', '男', '女', '男', '女'],
        '人口数量': [1400050000, 1368100000, 328200000, 329000000, 126300000, 126500000]}

df = pd.DataFrame(data).set_index(['国家', '性别'])

df = df.unstack()

print(df)

输出结果:

       人口数量        
性别       女         男
国家                  
中国  1368100000  1400050000
日本    126500000    126300000
美国    329000000    328200000

示例2:将多层次的行和列索引的DataFrame对象“旋转”为单层行索引

import pandas as pd

data = {'城市': ['北京市', '北京市', '北京市', '上海市', '上海市', '上海市', '成都市', '成都市', '成都市'],
        '日期': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-01', '2020-01-02', '2020-01-03', '2020-01-01', '2020-01-02', '2020-01-03'],
        '降雨量': [0, 5, 10, 10, 12, 6, 8, 7, 7],
        '温度': [2, 1, 0, 4, 3, 2, 8, 7, 6]}

df = pd.DataFrame(data).set_index(['城市', '日期']).unstack(level=0)

print(df.unstack())

输出结果:

         降雨量             温度           
城市       北京市 成都市 上海市 北京市 成都市 上海市
日期                                       
2020-01-01   0    8   10    2    8    4
2020-01-02   5    7   12    1    7    3
2020-01-03  10    7    6    0    6    2

在本例中,为了方便对城市和日期两个维度的数据进行分析,最终采用了两次unstack操作。

总结

pandas.DataFrame.unstack()方法是pandas数据处理库中数据重塑的重要方法。通过该方法可以将包含多个层级索引的DataFrame对象转换成单层索引的DataFrame对象,方便进行数据清洗和分析。