pandas之groupby方法超级详细用法,值得收藏

       在数据分析工作中,经常需要将数据根据某个(多个)字段划分为不同的群体(group)进行分析。在Pandas中,分组分析的主要运由groupby方法完成。这篇文章将详细介绍groupby用法以及对应的agg、transform、apply的用法。

        我们还是以NBA著名球星勒布朗詹姆斯2020-2021赛季的数据为例进行分析,有关的数据可在https://download.csdn.net/download/hanyunkaka/27238024?spm=1001.2014.3001.5503进行下载。

import numpy as np
import pandas as pd

df = pd.read_csv("lbj-2020-2021-regular.csv",encoding="gbk")

        1、agg用法

        agg的用法较为简单,如果要计算詹姆斯对阵每个NBA球队时的平均得分,则

score_average = df.groupby("对手").agg({"得分":'mean'})

        这段与下面的代码是等价的:

score_average = df.groupby("对手")["得分"].mean()

        2、transform用法

        transform与agg不同的地方在于,transform会对每一条数据求得相应的结果,同组内的数据结果相同,组内数据求完结果之后按照原索引的顺序返回结果。

        举个简单的例子,如果要计算詹姆斯对阵每个NBA球队时的平均得分,并且把平均得分新建一列附在原数据上,一般做法为:

score_average_dict = df.groupby("对手")["得分"].mean().to_dict()
df["score_average"] = df["对手"].map(score_average_dict)

        如果使用transform,则只需一行代码:

df["score_average"] = df.groupby("对手")["得分"].transform("mean")

        3、apply用法

        apply用法更为灵活,可以用于更为复杂的场景。如果要获得詹姆斯对阵每个NBA球队时的最高得分,则需要用到apply函数。

def highest_score(x):
    df = x.sort_values(by=["得分"],ascending=True)
    return df.iloc[-1:]
    
score_high = df.groupby("对手").apply(highest_score)
 

  • 20
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论
`pandas`是Python中常用的数据处理库,提供了很多方便的数据操作功能。其中`groupby`是一个非常强大的功能,可以对数据进行分组操作,然后进行聚合计算、变换、过滤等操作。下面是一个示例,展示`groupby`的使用方法。 假设我们有一个数据集,包含销售人员的销售记录,每条记录包括销售人员姓名、销售日期、销售金额等信息。我们想要按照销售人员进行分组,然后统计每个人的销售总金额、平均销售金额、最大销售金额等等。 首先,我们需要创建一个`DataFrame`对象,包含销售记录: ```python import pandas as pd data = {'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'], 'Date': ['2021-01-01', '2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-02'], 'Amount': [100, 200, 150, 300, 250, 200]} df = pd.DataFrame(data) ``` 这个`DataFrame`对象包含三列:`Name`、`Date`、`Amount`。我们可以使用`groupby`方法按照`Name`进行分组,然后进行聚合计算: ```python grouped = df.groupby('Name') result = grouped.agg({'Amount': ['sum', 'mean', 'max']}) print(result) ``` 上面的代码中,`grouped = df.groupby('Name')`将数据按照`Name`进行分组,并返回一个`GroupBy`对象,可以对它进行聚合计算。`result = grouped.agg({'Amount': ['sum', 'mean', 'max']})`对`GroupBy`对象进行聚合计算,计算每个人的销售总金额、平均销售金额、最大销售金额,并将结果保存在`result`对象中。 输出结果如下: ``` Amount sum mean max Name Alice 400 200.0 300 Bob 450 225.0 250 Charlie 350 175.0 200 ``` 可以看到,`result`对象包含每个人的销售总金额、平均销售金额、最大销售金额。我们可以看到,Alice在2021-01-02这一天卖出了销售金额最高的商品。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hanyunkaka

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值