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函数配合其他操作。这些方法可以根据具体的需求选择使用,通过将分组转化为列,我们可以更方便地对数据进行进一步的分析和处理。
极客教程