python pandas数据堆叠

python pandas数据堆叠

0 背景

python pandas数据堆叠

数据堆叠(stack())和解堆叠(unstack())是 Pandas 中处理多级索引DataFrame 的两个重要方法,它们用于改变数据的形状。这两个方法在数据重塑和透视表操作中非常有用。

数据堆叠为了将 DataFrame 的列索引转换成行索引,通常用于将宽格式数据转换成长格式。可以简单理解成将多列数据转为一列数据的过程。用于增加 DataFrame 的层级深度,使数据集更加“纵向”。

解堆叠与堆叠相反, 是为了将 DataFrame 的行索引转换成列索引,通常用于将长格式数据转换成宽格式。用于减少 DataFrame 的层级深度,使数据集更加“横向”。

什么时候会用到呢? 比如我们有一份报表数据是从1994-2024年的数据, 如果将每一年作为列, 那样就会有30个数据列, 在一些情况下, 列数太多就不便于展示, 因为此时, 我们可以使用数据堆叠, 将所有的年份压缩到一列里面去。

1 使用

参数说明

stack()

返回DataFrame or Series

def stack(
        self,
        level: IndexLabel = -1,
        dropna: bool | lib.NoDefault = lib.no_default,
        sort: bool | lib.NoDefault = lib.no_default,
        future_stack: bool = False,
    )
 -> DataFrame or Series
  • level: 默认为 -1,表示最内层的索引。它决定了哪个级别的列索引会被转换为行索引。可以是列索引的级别名称或数字。例如,如果我们的 DataFrame 有多级列索引,我们可以选择要堆叠哪一级的列。
  • dropna: 默认为 True,意味着在堆叠过程中会删除所有含有缺失值的行。如果设置为 False,则即使是缺失值也会被保留。
  • sort: 该参数决定了堆叠操作后的结果是否应该排序。如果为 True,则结果将根据索引排序。
  • future_stack: 这是一个相对较新的参数,用于指示 stack() 方法未来的行为变化。正常情况下我们无需修改此参数。

unstack()

结果返回一个DataFrame.

def unstack(
    self,
    level: IndexLabel = -1,
    fill_value: Hashable | None = None,
    sort: bool = True,
)
 -> DataFrame
  • level: 默认为 -1,表示最内层的索引。这个参数决定了哪个级别的行索引会被转换为列索引。可以是行索引的级别名称或数字。
  • fill_value: 当我们使用 unstack() 时,如果某些组合在原始数据中不存在,将会产生缺失值。fill_value 可以用来指定这些缺失值的替代值。
  • sort: 该参数决定了解堆叠操作后的结果是否应该排序。如果为 True,则结果将根据索引排序。

初始化数据

import pandas as pd
import numpy as np
df = pd.DataFrame({
    '姓名': ['徐坤''蔡坤''蔡徐'],
    '年龄': [283445],
    '邮箱': ['xukun@orange.com''caikun@apple.com''caixu@orange.com']
})

姓名 年龄 邮箱
0 徐坤 28 xukun@orange.com
1 蔡坤 34 caikun@apple.com
2 蔡徐 45 caixu@orange.com

数据堆叠

我们先将姓名列设置为索引

df_ = df.set_index('姓名')

姓名
年龄
邮箱
徐坤 28 xukun@orange.com
蔡坤 34 caikun@apple.com
蔡徐 45 caixu@orange.com
one = df_.stack()
one

姓名

<unnamed>
徐坤 年龄 28

邮箱 xukun@orange.com
蔡坤 年龄 34

邮箱 caikun@apple.com
蔡徐 年龄 45

邮箱 caixu@orange.com

看一下它的类型, 是一个Series序列.

type(one)

'''
pandas.core.series.Series
'''

看一下索引和值, 索引是一个多级索引.

one.index

'''
MultiIndex([('徐坤', '年龄'),
            ('徐坤', '邮箱'),
            ('蔡坤', '年龄'),
            ('蔡坤', '邮箱'),
            ('蔡徐', '年龄'),
            ('蔡徐', '邮箱')],
           names=['姓名', None])
'''


one.values

'''
array([28, 'xukun@orange.com', 34, 'caikun@apple.com', 45,
       'caixu@orange.com'], dtype=object)
'''

解堆叠

上面的 one 是我们堆叠后的数据, 因此我们直接对该数据进行解堆叠操作

one.unstack()

姓名
年龄
邮箱
徐坤 28 xukun@orange.com
蔡坤 34 caikun@apple.com
蔡徐 45 caixu@orange.com

解堆叠后生成的是一个DataFrame。

2 关于

数据的堆叠和解堆叠分别用来解决数据的展开和收缩的问题。堆叠将数据转换成一维形式,使我们能够从不同的维度观察和使用数据。与此相反,解堆叠则是堆叠的相反过程。

如果你觉得这期内容不错的话, 欢迎点赞, 在看, 关注我的微信公众号


原文始发于微信公众号(其之):python pandas数据堆叠

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204734.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!