返回
Pandas GroupBy:轻松提取分组统计,揭示数据模式
python
2024-03-12 02:44:15
利用 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 中一个必不可少的工具,使我们能够轻松提取分组统计数据,并通过添加组大小信息进一步丰富我们的分析。通过掌握这些技巧,你可以有效地将大量复杂的数据转化为有用的见解。