Pandas - groupby-agg 分组统计

Pandas - groupby-agg 分组统计

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

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True,group_keys=True, squeeze=False, **kwargs)

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

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

""" 数据聚合与分组技术, 利用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)
        })
print(df)
# 按key1分组, 计算data1列的平均值
df.groupby('key1')['data1'].mean()
  key1 key2     data1     data2
0    a  one  1.624345 -2.301539
1    a  two -0.611756  1.744812
2    b  one -0.528172 -0.761207
3    b  two -1.072969  0.319039
4    a  one  0.865408 -0.249370

key1
a    0.625999
b   -0.800570
Name: data1, dtype: float64

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

# 按照key1, key2分组, 对data1列计数
print(df)
df.groupby(['key1','key2'])['data1'].count()
  key1 key2     data1     data2
0    a  one  1.624345 -2.301539
1    a  two -0.611756  1.744812
2    b  one -0.528172 -0.761207
3    b  two -1.072969  0.319039
4    a  one  0.865408 -0.249370

key1  key2
a     one     2
      two     1
b     one     1
      two     1
Name: data1, dtype: int64

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

# 以任意数组为分组键
print(df)
arr = np.array([1993, 1994, 1993, 1996, 1996])

keyArr = df["data1"].groupby(arr).count()
keyArr
  key1 key2     data1     data2
0    a  one  1.624345 -2.301539
1    a  two -0.611756  1.744812
2    b  one -0.528172 -0.761207
3    b  two -1.072969  0.319039
4    a  one  0.865408 -0.249370

1993    2
1994    1
1996    2
Name: data1, dtype: int64

agg的应用

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


""" agg数据聚合 """
key1 = df.groupby(['key1'],as_index=False)['data1'].agg({'data':'count'})
key1
key1data
0a3
1b2

骚话时间:事实易改,有几人能初心不渝,真心不负。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值