分享

最强大的数据分析利器pandas||数据分析之数据分组

 白河baihe 2023-08-29 发布于浙江

图片

图片

数据分组重要性

在现实世界的数据分析中,我们经常需要根据某些特征将数据进行分组,然后对每个组进行聚合分析。比如,我们可能想要按照地区、时间、类别等因素对销售数据进行分组,然后计算每组的平均值、总和等指标。这就是数据分组的重要性所在。

数据分组案例

我们数据分组使用的是pandas.groupby()方法

其基本语法如下

 df.groupby(
  by:用于分组的变量/函数,
  level=None 相应的轴存在多重索引时,指定用于分组的级别,
  as_index=True:结果是否按照关键字进行排序
  sort = True 结果是否按照分组关键字排序
 
 )

我们先来看一个简单的例子。

我们导入我们的学生成绩数据,然后查看数据

 import pandas as pd
 
 df = pd.read_excel('./pandas_data/stu_data.xlsx')
 df.head()

图片

接下来我们根据课程列进行分组,查看分组后数据类型

 dfg = df.groupby('课程')
 type(dfg)

分组对象的数据类型是pandas.core.groupby.generic.DataFrameGroupBy

那么我们可以通过分组对象的groups方法查看分组里数据

 dfg.groups

它会返回一个类字典视图对象

图片

键是分组类别,值是分组的具体值。

我们还可以查看分组的描述。使用descrbe方法

 dfg.describe()

图片

这是我们的单列分组,此外我们还可以根据多列分组,只需要把分组变量以列表形式传递到by参数即可。我们在来看个例子

 dfgg = df.groupby(['性别','课程'])
 dfgg.groups

图片

基于拆分进行筛选

我们还可以拿出分组后的一组数据进行操作,我们使用的方法是dfgroup.get_group()

我们来看个例子

图片

我们使用dfg.get_group(“概率统计”)就可以获取到所有学概率统计课程的学生,我们也可以针对某一组数据进行描述。

图片

分组汇总

图片

我们使用group分组后的数据可以按照需求进行汇总。汇总我们使用的函数是df.aggregete()可以简写成agg,可以用axis指定汇总维度。也可以直接使用汇总函数。

汇总函数如下:

图片

接下来我们看一个示例:

我们对分组后数据的最大值进行汇总。

图片

我们还可以对分组后的某列进行汇总

图片

如果我们有其他需求,我们也可以自定义汇总函数或者传递numpy函数。

数据透视表

Pandas还支持创建数据透视表,它可以帮助我们更直观地展示分组后的数据。我们构建数据透视表使用pivot_table其语法如下:

 pd.pivot_table(
  df,
    values=None,
    index=None,
    columns=None,
    aggfunc='mean',
    fill_value=None,
    margins=False,
    dropna=True,
    margins_name='All',
    observed=False,
    sort=True,
 ) -> 'DataFrame'

让我们看一个例子:

 import pandas as pd
 
 # 创建一个示例DataFrame
 data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
         'Value': [10, 20, 15, 25, 30, 35]}
 df = pd.DataFrame(data)
 print(df)
 grouped = df.groupby('Category')
 # 创建数据透视表,以Category为行,以Value为列,计算平均值
 pivot_table =pd.pivot_table(df, index='Category', values='Value', aggfunc='max')
 print(pivot_table)

图片

数据过滤和转化

在数据分组过程中,我们还可以进行过滤和转换操作。比如,我们可以过滤掉某些分组,或者对每个分组的数据进行转换。下面是一个示例:

 # 过滤出总和大于30的分组
 filtered_groups = grouped.filter(lambda x: x['Value'].sum() > 30)
 print(filtered_groups)
 
 # 对每个分组的数据进行标准化
 transformed = grouped.transform(lambda x: (x - x.mean()) / x.std())
 print(transformed)
 

图片

以上代码展示了如何通过filter函数过滤出总和大于30的分组,以及如何使用transform函数对每个分组的数据进行标准化处理。

Pandas的数据分组功能为数据分析提供了强大的支持。无论是简单的聚合操作还是复杂的多列分组,Pandas都能轻松胜任。通过本文的介绍,希望大家能够更好地理解和运用Pandas中的数据分组技巧,从而更加高效地进行数据分析工作。记得多多练习,掌握这些技能,让数据在你手中展现出更多的价值!🚀📈

就在这里,我们对Pandas中数据分组的探索就告一段落了。希望这篇推文能够帮助到你,谢谢大家的阅读!如果你有任何问题或者想要了解更多,请随时留言。一起加油,成为数据分析的高手吧!💪📊

[附带清晰的代码示例和实用技巧,这篇推文希望能够帮助读者更好地理解如何在Pandas中进行数据分组,从而为数据分析提供更有力的支持。通过实际代码示例,读者可以更加直观地掌握这一重要技能,为实际工作中的数据处理和分析提供帮助。]

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多