返回

Pandas GroupBy:轻松提取分组统计,揭示数据模式

python

利用 Pandas GroupBy 轻松提取分组统计

引言

在数据分析的广阔世界中,经常需要对数据进行分组,以揭示其内在模式和趋势。Pandas 凭借其强大的 GroupBy 功能,为我们提供了轻松提取分组统计数据的强大工具。

GroupBy 的魔力

GroupBy 通过将数据帧按照指定的列进行分组,让我们能够对每个组进行聚合计算,获得有意义的见解。

1. 分组数据

只需一行代码,即可将数据帧按照任意数量的列进行分组:

grouped_df = df.groupby(['col1', 'col2'])

2. 聚合计算

使用聚合函数,我们可以针对每个组计算各种统计数据,如均值、总和、计数等:

grouped_df.agg({'col3': 'mean', 'col4': 'mean'})

添加组大小

有时,我们还需要知道每个组包含多少行。借助 size() 函数,我们可以轻松添加一个名为 row_count 的列:

row_count_df = grouped_df.size().rename('row_count').to_frame()

合并分组统计和组大小

最后,我们将分组统计和组大小合并到一个完整的 DataFrame 中:

final_df = pd.merge(grouped_df, row_count_df, on=['col1', 'col2'], how='left')

示例应用

让我们用一个示例来说明 GroupBy 的实际应用。假设我们有一个包含销售数据的 DataFrame,我们希望根据产品类别和区域分组数据,并计算每个组的销售总和和平均销售额:

import pandas as pd

# 创建示例数据帧
df = pd.DataFrame({
    'product_category': ['A', 'A', 'B', 'B'],
    'region': ['X', 'Y', 'X', 'Y'],
    'sales': [10, 20, 30, 40]
})

# 分组数据并计算统计数据
grouped_df = df.groupby(['product_category', 'region']).agg({'sales': ['sum', 'mean']})

# 添加组大小
row_count_df = grouped_df.size().rename('row_count').to_frame()

# 合并结果
final_df = pd.merge(grouped_df, row_count_df, on=['product_category', 'region'], how='left')

# 打印结果
print(final_df)

常见问题解答

1. 如何为多个聚合函数创建多个输出列?

grouped_df.agg({'col1': ['mean', 'max'], 'col2': ['sum', 'count']})

2. 如何处理 NaN 值?

grouped_df.agg({'col1': ['mean', 'fillna:0'], 'col2': ['sum', 'fillna:0']})

3. 如何对索引使用自定义函数?

grouped_df.agg(lambda x: x.unique().size)

4. 如何对聚合结果应用嵌套函数?

grouped_df.agg({'col1': ['mean', lambda x: x.mean() * 2]})

5. 如何仅获取特定列的统计数据?

grouped_df[['col1', 'col2']].agg({'col1': 'mean', 'col2': 'mean'})

总结

GroupBy 是 Pandas 中一个必不可少的工具,使我们能够轻松提取分组统计数据,并通过添加组大小信息进一步丰富我们的分析。通过掌握这些技巧,你可以有效地将大量复杂的数据转化为有用的见解。