pandas - groupby, agg分组统计

分组统计是数据分析中较为复杂的一种操作,但是使用起来非常有用,能避开大量的循环等等。

DataFrame.groupby(by=Noneaxis=0level=Noneas_index=Truesort=True,group_keys=Truesqueeze=False**kwargs)

对DataFrame或者series进行分组统计;by为DataFrame中的某一列;as_index表示为


1. 以某一列为参照物对另一列进行分组统计

对data1按照key1进行分组,然后求均值:

# -*- coding: utf-8 -*-
""" 数据聚合与分组技术, 利用Python进行数据分析

1. groupby;
"""
import pandas as pd
import numpy as np

np.random.seed(1)

""" 1. groupby, 按键拆分, 重组, 求和 """
df = pd.DataFrame({
            "key1":     ["a", "a", "b", "b", "a"],
            "key2":     ["one", "two", "one", "two", "one"],
            "data1":    np.random.randn(5),
            "data2":    np.random.randn(5)
        })

# 按key1分组, 计算data1列的平均值
key1 = df["data1"].groupby(df["key1"]).mean()

# 语法糖为
key1 = df.groupby(["key1"])["data1"].mean()

2. 以某几列为参照物对另一列进行分组统计

# -*- coding: utf-8 -*-
""" 数据聚合与分组技术, 利用Python进行数据分析

1. groupby;
"""
import pandas as pd
import numpy as np

np.random.seed(1)

""" 1. groupby, 按键拆分, 重组, 求和 """
df = pd.DataFrame({
            "key1":     ["a", "a", "b", "b", "a"],
            "key2":     ["one", "two", "one", "two", "one"],
            "data1":    np.random.randn(5),
            "data2":    np.random.randn(5)
        })

# 按照key1, key2分组, 对data1列计数
key12 = df["data1"].groupby([df["key1"], df["key2"]]).count().unstack()


3. 以任意数组为分组键对另一列进行分组统计

以一个数组来对某一列进行分组统计。

# -*- coding: utf-8 -*-
""" 数据聚合与分组技术, 利用Python进行数据分析

1. groupby;
"""
import pandas as pd
import numpy as np

np.random.seed(1)

""" 1. groupby, 按键拆分, 重组, 求和 """
df = pd.DataFrame({
            "key1":     ["a", "a", "b", "b", "a"],
            "key2":     ["one", "two", "one", "two", "one"],
            "data1":    np.random.randn(5),
            "data2":    np.random.randn(5)
        })

# 以任意数组为分组键
arr = np.array([1993, 1994, 1993, 1996, 1996])
keyArr = df["data1"].groupby(arr).count()

4. 对分组进行迭代

对象经过groupby之后是可以迭代的。

# -*- coding: utf-8 -*-
""" 数据聚合与分组技术, 利用Python进行数据分析

1. groupby;
"""
import pandas as pd
import numpy as np

np.random.seed(1)

""" 1. groupby, 按键拆分, 重组, 求和 """
df = pd.DataFrame({
            "key1":     ["a", "a", "b", "b", "a"],
            "key2":     ["one", "two", "one", "two", "one"],
            "data1":    np.random.randn(5),
            "data2":    np.random.randn(5)
        })

# 对分组进行迭代
for name,group in df.groupby("key1"):
    print(name, group)

5. agg的应用

可以对groupby的结果,同时应用多个函数;可以对groupby的结果更正列名。

""" agg数据聚合 """
key1 = df.groupby(["key1"], as_index=False)["data1"].agg({"aa" : "count"})

参考文献

http://jingyan.baidu.com/article/adc8151358a781f723bf73c4.html

http://jingyan.baidu.com/article/d45ad148947fd369552b80f6.html

pandas是一个强大的数据处理和分析库,其中的groupby和agg函数是用于对数据进行分组和聚合操作的重要工具。 groupby函数可以将数据按照指定的列或者多个列进行分组,然后对每个分组进行相应的操作。它的基本语法如下: ``` df.groupby(by=grouping_columns)[columns_to_show].function() ``` 其中,by参数指定了用于分组的列名或者列名列表,columns_to_show参数指定了需要显示的列名或者列名列表,function参数指定了对每个分组进行的操作,比如求和、计数、平均值等。 agg函数是groupby函数的一个补充,它可以对每个分组进行更加灵活的聚合操作。它的基本语法如下: ``` df.groupby(by=grouping_columns).agg({'column_name': 'function'}) ``` 其中,by参数和groupby函数一样,指定了用于分组的列名或者列名列表。agg函数的参数是一个字典,字典的键是需要聚合的列名,值是对应的聚合函数。 下面是一个示例,演示了groupby和agg函数的用法: ```python import pandas as pd # 创建一个DataFrame data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'Nick', 'John'], 'Subject': ['Math', 'Math', 'Math', 'English', 'English', 'English'], 'Score': [80, 90, 75, 85, 95, 80]} df = pd.DataFrame(data) # 按照Name列进行分组,并计算每个分组的平均分和总分 result = df.groupby('Name').agg({'Score': ['mean', 'sum']}) print(result) ``` 输出结果如下: ``` Score mean sum Name John 77 155 Nick 92 185 Tom 82 165 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值