Pandas GroupBy Unstack

Pandas GroupBy Unstack

Pandas Unstack是一个函数,它可以将堆叠的数据框架中的索引列的水平进行透视。一个堆叠的数据框架通常是pandas中聚合的groupby函数的结果。Stack()将列设置到一个新的层次,而Unstack()则是对索引列的透视。有不同的方法来解开pandas数据框架,这将在下面的方法中讨论。

方法1:使用unstack()对pandas数据帧进行多级解垛的一般方法

对一个数据框架进行Groupby聚合,通常会返回一个堆叠的数据框架对象,根据聚合模型的不同,有多个层次。

# import the python pandas package
import pandas as pd
# create a sample dataframe
data = pd.DataFrame({"cars": ["bmw", "bmw", "benz", "benz"],
                     "sale_q1 in Cr": [20, 22, 24, 26],
                     'sale_q2 in Cr': [11, 13, 15, 17]},
                    columns=["cars", "sale_q1 in Cr",
                             'sale_q2 in Cr'])
print(data)
 
# stack the data using stack() function
stacked_data = data.stack()
print(stacked_data)
 
# unstack the dataframe by first level
stack_level_1 = stacked_data.unstack(level=0)
print(stack_level_1)
 
# unstack the dataframe by second level
stack_level_2 = stacked_data.unstack(level=1)
print(stack_level_2)

输出:

Pandas GroupBy - Unstack

代码 解释:

  • 创建一个显示两个季度汽车销售情况的样本数据框架。
  • 现在,使用stack()函数将数据框架堆叠起来,这将把列与行的值堆叠起来。
  • 由于我们有两列,而解开堆叠,它将被视为两个不同的层次。
  • 现在,使用unstack函数,分别对第0级和第1级的数据帧进行堆叠,在两个不同的级别上进行堆叠。
  • 这取决于使用情况,以堆叠第一层或第二层。

方法2:用简单的unstack()对pandas数据帧进行GroupBy解堆

每当我们在pandas数据框架上使用groupby函数时,每一列都有一个以上的聚合函数,输出通常是一个多索引的列,其中第一个索引指定了列名,第二个列索引指定了聚合函数名。

# import the python pandas package
import pandas as pd
 
# create a sample dataframe
data = pd.DataFrame({"cars": ["bmw", "bmw", "benz", "benz"],
                     "sale_q1 in Cr": [20, 22, 24, 26],
                     'sale_q2 in Cr': [11, 13, 15, 17]},
                    columns=["cars", "sale_q1 in Cr",
                             'sale_q2 in Cr'])
print(data)
 
# aggregate the car sales data by sum min
# and max sales of two quarters as shown
grouped_data = data.groupby('cars').agg(
    {"sale_q1 in Cr": [sum, max],
     "sale_q2 in Cr": [sum, min]})
print(grouped_data)
 
# general way of unstacking the grouped dataframe
gen_unstack = grouped_data.unstack()
print(gen_unstack)
 
# stacking the grouped dataframe at
# different levels and unstacking
# unstacking the stacked dataframe at level = 0
unstack_level1 = grouped_data.stack(level=0).unstack()
print(unstack_level1)
 
# unstacking the stacked dataframe at level =1
unstack_level2 = grouped_data.stack(level=1).unstack()
print(unstack_level2)

输出:

Pandas GroupBy - Unstack

代码 解释:

  • 创建一个显示两个季度汽车销售情况的样本数据框架。
  • 使用GroupBy函数将汽车销售数据按两个季度的最小和最大销售量之和分组,如图所示
  • 由于我们有两列,同时解开堆叠,它将被视为两个索引的两个不同层次。第一个索引将有列名,第二个索引将有聚合函数的名称。
  • 现在,对分组的数据框架执行一个简单的解堆操作。这个简单的解堆将把列转换成行,反之亦然,如输出中所示

方法3:GroupBy 在两个不同层次上用多个unstack()对pandas数据帧进行解堆

一般来说,为了对GroupBy函数产生的洞察力有更深的了解,通常会在分组数据框架的不同层次上进行堆叠。这个分组数据框架可以通过使用unstack()函数在不同层次上取消堆叠来进一步调查。下面给出了实际的实现。

# import the python pandas package
import pandas as pd
# create a sample dataframe
data = pd.DataFrame({"cars": ["bmw", "bmw", "benz", "benz"],
                     "sale_q1 in Cr": [20, 22, 24, 26],
                     'sale_q2 in Cr': [11, 13, 15, 17]},
                    columns=["cars", "sale_q1 in Cr",
                             'sale_q2 in Cr'])
print(data)
 
# aggregate the car sales data by sum min and
# max sales of two quarters as shown
grouped_data = data.groupby('cars').agg(
    {"sale_q1 in Cr": [sum, max], "sale_q2 in Cr": [sum, min]})
print(grouped_data)
 
# stacking the grouped dataframe at
# different levels and unstacking
# unstacking the stacked dataframe at level = 0
unstack_level1 = grouped_data.stack(level=0).unstack()
print(unstack_level1)
 
# unstacking the stacked dataframe at level =1
unstack_level2 = grouped_data.stack(level=1).unstack()
print(unstack_level2)

输出:

Pandas GroupBy - Unstack

代码 解释:

  • 创建一个显示两个季度汽车销售情况的样本数据框架。
  • 使用GroupBy函数将汽车销售数据按两个季度的最小和最大销售量之和分组,如图所示
  • 由于我们有两列,同时解开堆叠,它将被视为两个索引的两个不同层次。第一个索引将有列名,第二个索引将有聚合函数的名称。
  • 现在,在分组数据框架的第0层使用stack(),并将分组数据框架unstack()。
  • 然后,在分组数据框架的第1层使用stack(),并将分组数据框架unstack()。
  • 这取决于在第一层或第二层取消数据帧的堆叠的用例。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程