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包含三列:Name
、Age
和Score
。现在我们想要按照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
列进行了分组,然后我们选择了Age
和Score
两列,并使用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
列转化为了两列,分别是Age
和Score
。其中,Age
和Score
变为了新的列的索引层级,而原来的索引层级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
列进行了分组,并将Age
和Score
列作为值列。结果与我们使用groupby
函数得到的结果完全一致。
使用merge
函数
除了使用unstack
和pivot_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
函数配合其他操作。这些方法可以根据具体的需求选择使用,通过将分组转化为列,我们可以更方便地对数据进行进一步的分析和处理。