📜  dataframe unstack - Python (1)

📅  最后修改于: 2023-12-03 15:00:20.930000             🧑  作者: Mango

DataFrame unstack - Python

在 Pandas 中,unstack 是将一个表格型数据(DataFrame)变成一个更大的、宽格式的数据表,使其具备多层级索引的功能。在本篇文章中,我们将学习 unstack 的一些概念、用法以及示例,展示它对 Pandas 数据分析的重要性。

概念

DataFrame 中的每一个数据都是由对应的行和列所组成的,而 unstack 则是将列索引(也可能是行索引)转换为行中的一级索引,即将宽格式表格变为长格式表格。使用 unstack 时,需要提供一个索引级别的名称或者位置(注意:这个索引和列索引不同),然后进行操作。

用法

最常见的 unstack 使用方法是对多层级列索引数据表进行转换,将表格从宽格式转换为长格式:

import pandas as pd

# 创建多层级列索引的 DataFrame
df = pd.DataFrame({'row': [0, 1, 2],
                   'one_a': [1, 2, 3],
                   'one_b': [4, 5, 6],
                   'two_a': [7, 8, 9],
                   'two_b': [10, 11, 12]})
df = df.set_index('row')

# 转换数据表格
df_unstacked = df.unstack(1)

print(df_unstacked)

输出:

| | level_1 | 0 | 1 | 2 | | :-: | :-------: | :-: | :-: | :-: | | one | a | 1 | 2 | 3 | | | b | 4 | 5 | 6 | | two | a | 7 | 8 | 9 | | | b | 10 | 11 | 12 |

示例

下面是一些更复杂一些的示例:

  1. 对单个层级索引进行转换
# 创建单层级索引的 DataFrame
df = pd.DataFrame({'row': [0, 1, 2, 3], 'a': [1, 2, 3, 4], 'b': [5, 6, 7, 8]})
df = df.set_index('row')

# 转换数据表格
df_unstacked = df.unstack(0)  # 单层级索引的转换只需要一个整数参数

print(df_unstacked)

输出:

| | row | 0 | 1 | 2 | 3 | | :-: | :---: | :-: | :-: | :-: | :-: | | a | | 1 | 2 | 3 | 4 | | b | | 5 | 6 | 7 | 8 |

  1. 对索引层级中的元素进行排序
# 创建多层级索引的 DataFrame
df = pd.DataFrame({'row': [0, 0, 1, 1], 'col': ['a', 'b', 'a', 'b'], 'value': [1, 2, 3, 4]})
df = df.set_index(['row', 'col'])

# 转换数据表格,并对 'col' 索引进行排序
df_unstacked = df.unstack('col').sort_index(level=1)

print(df_unstacked)

输出:

| | value | | :-: | :---: | | row | a | b | | 0 | 1 | 2 | | 1 | 3 | 4 |

总结

unstack 可以帮助我们将宽格式的数据表格转换为长格式,方便数据处理和分析。关键是理解多层级索引,传递必要的参数,以及熟悉相关的参数调整方法。在使用 unstack 时,需要根据具体数据情况选择合适的的参数来实现数据表格的转换,获得更好的分析效果。