深入理解unstack

发布时间:2023-05-19

一、unstack翻译

翻译意为“取消堆叠”,在数据分析和处理中,指根据某个字段的值,将数据行转换为数据列。比如在一个表格中,包含了不同年份、月份、销售金额三个维度的数据,通过unstack可以将不同月份的销售金额转换为不同的列,便于进行分析。

二、unstack函数作用

在pandas库中,unstack是一个重要的数据透视函数。它可以将某个轴上的数据进行透视、重塑和取消堆叠操作,从而可以方便地进行数据展示、分析和可视化。 unstack函数的语法为:df.unstack(level=-1, fill_value=None) 其中,df是待处理的数据表,level是堆叠列的级别,fill_value是NaN值的替换值,默认为None。

三、stack函数选取

unstack函数的逆操作是stack函数,也是一个重要的数据透视函数。与unstack函数相反,它将数据列转换为数据行。stack函数的语法为:df.stack(level=-1, dropna=True)。其中,df是数据表,level是堆叠列的级别,dropna表示是否去掉NaN值。

四、unstack的使用场景

  1. 将复合格式的数据进行透视
import pandas as pd
data = {'Weekday': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
        'City 1': [25, 30, 80, 70, 35, 60],
        'City 2': [30, 35, 70, 60, 40, 65],
        'City 3': [15, 20, 50, 50, 25, 45]}
df = pd.DataFrame(data)
print(df)
#     Weekday  City 1  City 2  City 3
# 0    Monday      25      30      15
# 1   Tuesday      30      35      20
# 2 Wednesday      80      70      50
# 3  Thursday      70      60      50
# 4    Friday      35      40      25
# 5  Saturday      60      65      45
df = df.set_index('Weekday')
print(df)
#           City 1  City 2  City 3
# Weekday                        
# Monday        25      30      15
# Tuesday       30      35      20
# Wednesday     80      70      50
# Thursday      70      60      50
# Friday        35      40      25
# Saturday      60      65      45
df2 = df.unstack()
print(df2)
#        Weekday  
# City 1  Monday       25
#         Tuesday      30
#         Wednesday    80
#         Thursday     70
#         Friday       35
#         Saturday     60
# City 2  Monday       30
#         Tuesday      35
#         Wednesday    70
#         Thursday     60
#         Friday       40
#         Saturday     65
# City 3  Monday       15
#         Tuesday      20
#         Wednesday    50
#         Thursday     50
#         Friday       25
#         Saturday     45

在这个例子中,我们将一个三维的数据表格转化为了一个二维的数据表格,其中每个城市的每天销售额变成了该城市和该天的组合,并将原本的三个城市维度变成了三个新的列。 2. 多级索引数据的透视

data = pd.read_csv('sales.csv')
print(data)
#     Region      City        Date   Product  Sales
# 0   East   New York  2020/01/01  Product1     10
# 1   East   New York  2020/01/01  Product2     20
# 2   East   New York  2020/01/02  Product1     15
# 3   East   New York  2020/01/02  Product2     25
# 4   East    Boston  2020/01/01  Product1     12
# 5   East    Boston  2020/01/01  Product2     18
# 6   East    Boston  2020/01/02  Product1     16
# 7   East    Boston  2020/01/02  Product2     22
# 8   West  San Fransico  2020/01/01  Product1     8
# 9   West  San Fransico  2020/01/01  Product2     10
# 10  West  San Fransico  2020/01/02  Product1     6
# 11  West  San Fransico  2020/01/02  Product2     15
# 12  West         LA  2020/01/01  Product1     7
# 13  West         LA  2020/01/01  Product2     9
# 14  West         LA  2020/01/02  Product1     4
# 15  West         LA  2020/01/02  Product2     8
df = data[['Region', 'City', 'Product', 'Sales']].set_index(['Region', 'City', 'Product'])
print(df)
#                          Sales
# Region City        Product     
# East   New York    Product1    10
#                    Product2    20
#        Boston      Product1    12
#                    Product2    18
# West   San Fransico Product1     8
#                    Product2    10
#        LA          Product1     7
#                    Product2     9
df2 = df.unstack(['City', 'Product'])
print(df2)
#               Sales                                           
# City         Boston        LA       New York       San Fransico
# Product     Product1 Product2 Product1 Product2     Product1 Product2 Product1 Product2
# Region                                                                                     
# East            12       18          10     20                NaN         NaN           ..          ..
# West             ..         ..            ..          ..                  7            9     8        10

在这个例子中,原本一个三元素索引(Region, City, Product)的表格,通过unstack函数分别将City和Product两个索引拆分为单独的列,得到了一个四元素索引的表格。这个方式可以将多维度的数据方便地进行展示和分析。

五、总结

本文深入地介绍了unstack函数的作用、语法和使用场景,对于数据分析和处理中的透视、重塑和转化操作提供了很好的帮助。 总之,unstack函数可以使得数据的展示和处理更加灵活、高效,对于数据分析工作与决策具有非常重要的意义。