Pandas 将Pandas groupby 分组转化为列

Pandas 将Pandas groupby 分组转化为列

在本文中,我们将介绍如何使用Pandas将Pandas的groupby功能所得到的分组转化为列。groupby是一个非常有用的函数,可以将数据按照某个或多个列进行分组,并对每个分组进行相应的操作,比如计算平均值、总和等。然而,在某些情况下,我们可能需要将分组后的结果转化为列,以便进一步分析数据。

阅读更多:Pandas 教程

分组和聚合

在开始之前,让我们先了解一下groupby是如何工作的。假设我们有一个包含以下数据的DataFrame:

import pandas as pd

data = {'Name': ['John', 'John', 'Alice', 'Alice', 'Alice'],
        'Age': [25, 30, 35, 40, 45],
        'Score': [85, 95, 90, 85, 80]}

df = pd.DataFrame(data)

这个DataFrame包含三列:NameAgeScore。现在我们想要按照Name列进行分组,并计算每个分组的平均年龄和平均分数。我们可以使用groupby函数来实现这个目标:

grouped = df.groupby('Name')
result = grouped[['Age', 'Score']].mean()
print(result)

运行结果如下所示:

       Age  Score
Name             
Alice  40.0   85.0
John   27.5   90.0

groupby函数将数据按照Name列进行了分组,然后我们选择了AgeScore两列,并使用mean函数计算了每个分组的平均值。结果是一个新的DataFrame,其中每一行表示一个分组,列是我们选择的聚合函数的结果。

使用unstack函数

若我们想要将groupby分组后的结果转化为列,可以使用unstack函数。unstack函数将索引的最内层(或指定的层)解除并以新的列重塑数据。接下来,让我们通过一个示例来说明如何使用unstack函数将分组转化为列。

# 使用之前的DataFrame
grouped = df.groupby('Name')
result = grouped[['Age', 'Score']].mean()

# 将分组转化为列
result_unstacked = result.unstack()
print(result_unstacked)

运行结果如下所示:

     Name 
Age  Alice    40.0
     John     27.5
Score Alice    85.0
     John     90.0
dtype: float64

unstack函数将分组后的结果按照Name列转化为了两列,分别是AgeScore。其中,AgeScore变为了新的列的索引层级,而原来的索引层级Name成为了新的行索引。

使用pivot_table函数

另一种将groupby分组转化为列的方法是使用pivot_table函数。pivot_table函数可以在一次操作中实现分组、聚合和转化为列的功能。让我们通过一个示例来说明如何使用pivot_table函数将分组转化为列。

# 使用之前的DataFrame
grouped = df.groupby('Name')
result = grouped[['Age', 'Score']].mean()

# 重置索引
result_reset = result.reset_index()

# 使用pivot_table函数将分组转化为列
result_pivot = pd.pivot_table(result_reset, index='Name', values=['Age', 'Score'])
print(result_pivot)

运行结果如下所示:

       Age  Score
Name             
Alice  40.0   85.0
John   27.5   90.0

pivot_table函数根据指定的Name列进行了分组,并将AgeScore列作为值列。结果与我们使用groupby函数得到的结果完全一致。

使用merge函数

除了使用unstackpivot_table函数之外,我们还可以使用merge函数将分组转化为列。merge函数可以将两个DataFrame按照指定的列进行合并,并将结果转化为新的DataFrame。接下来,让我们通过示例来说明如何使用merge函数将分组转化为列。

# 使用之前的DataFrame
grouped = df.groupby('Name')
result = grouped[['Age', 'Score']].mean()

# 重置索引
result_reset = result.reset_index()

# 使用merge函数将分组转化为列
result_merge = pd.merge(df, result_reset, on='Name', suffixes=('', '_mean'))
print(result_merge)

运行结果如下所示:

    Name  Age  Score  Age_mean  Score_mean
0   John   25     85      27.5        90.0
1   John   30     95      27.5        90.0
2  Alice   35     90      40.0        85.0
3  Alice   40     85      40.0        85.0
4  Alice   45     80      40.0        85.0

在这个结果中,我们将原始DataFrame与分组后的结果进行了合并。合并是根据Name列进行的,并使用了suffixes参数来区分原始列和聚合后的结果列。

总结

通过本文,我们学习了如何将Pandas的groupby分组转化为列。我们介绍了四种方法:使用unstack函数、使用pivot_table函数、使用merge函数和使用reset_index函数配合其他操作。这些方法可以根据具体的需求选择使用,通过将分组转化为列,我们可以更方便地对数据进行进一步的分析和处理。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程