3. 索引旋转

  1. DataFrame.stack()方法将数据的列索引旋转为行索引。注意:它跟转置不同,转置会同时旋转数据。

    1. DataFrame.stack(level=-1, dropna=True)
    • level:一个整数、字符串或者整数字符串的列表。如果列索引为多级索引,它指定了将哪个级别的索引旋转为行索引
    • dropna:一个布尔值。如果为True,则如果结果中某行全为NaN,则抛弃该行。

    DataFrame.stack()对应的就是DataFrame.unstack()方法。它将数据的行索引转换为列索引。注意:它跟转置不同,转置会同时旋转数据。

    1. DataFrame.unstack(level=-1, fill_value=None)
    • level:一个整数、字符串或者整数字符串的列表。如果行索引为多级索引,它指定了将哪个级别的索引旋转为列索引
    • fill_value:一个标量。如果结果中有NaN,则使用fill_value替换。

    旋转时,比如列索引旋转为行索引,则新的行索引是个多级索引,最内层的一级就是原来的列索引。

    stack_unstack0 stack_unstack1

  2. DataFrame.pivot()方法重排数据。它是一个快捷方式,它使用set_index将列数据变成行索引,然后使用unstack将行索引转为列索引。

    1. DataFrame.pivot(index=None, columns=None, values=None)
    • index:一个字符串。指定了一个column name,用该列数据来set_index(将该列数据变成行索引,删除了原来的旧的行索引)。如果为None,则不执行set_index

    • columns:一个字符串,指定了哪个列数据作为结果的columns labels

      实际上对 index,clumns 指定的列数据均 set_index,然后仅对 columns 对应的列数据 unstack

    • values:一个字符串,指定了哪个列数据作为结果的数据。如果未提供,则剩余的所有列都将作为结果的数据。

    pivot