pandas合并groupby_pandas数据聚合与分组运算——groupby方法

简介

pandas中一类非常重要的操作是数据聚合与分组运算。通过groupby方法能够实现对数据集的拆分、统计、转换等操作,这个过程一气呵成。

在本文中,你将学到:

选取特定列分组;

对分组进行迭代;

通过字典或Series分组;

通过函数分组;

通过索引级别分组。

Groupby技术

一个完整的分组运算过程是:“split-apply-combine”(拆分-应用-合并)。首先将数据分组拆分,按照组别划分。这种分组可以针对行(axis=0)或列(axis=1);然后针对分好的组别应用操作函数(聚合、统计等);最后这些结果会合并到最终对象中。这个过程如下:

接下来我们一一介绍。

选取特定列分组

直接来看一个例子:

>>>import numpy as np

>>>import pandas as pd

>>>df = pd.DataFrame({'x': list('aabba'), 'y': ['one', 'two', 'one', 'two', 'one'], 'd1': np.random.randn(5), 'd2': np.random.randn(5)})

x y d1 d2

0 a one 0.053183 0.447796

1 a two -1.117457 -1.476354

2 b one -1.360028 -2.527450

3 b two 1.856344 0.432823

4 a one -0.134772 1.628732

1

2

3

4

5

6

7

8

9

10

>>>importnumpyasnp

>>>importpandasaspd

>>>df=pd.DataFrame({'x':list('aabba'),'y':['one','two','one','two','one'],'d1':np.random.randn(5),'d2':np.random.randn(5)})

xyd1d2

0aone0.0531830.447796

1atwo-1.117457-1.476354

2bone-1.360028-2.527450

3btwo1.8563440.432823

4aone-0.1347721.628732

我们有这样一个DataFrame,假设我们想通过

x 进行分组,并计算

d1 列的平均值,有这样两种方式:

# 先选中d1列,然后再按照x分组

>>>a = df['d1'].groupby(df['x'])

>>>a

# 先分组,在选中d1列

>>>a = df.groupby('x')['d1']

1

2

3

4

5

6

7

8

# 先选中d1列,然后再按照x分组

>>>a=df['d1'].groupby(df['x'])

>>>a

# 先分组,在选中d1列

>>>a=df.groupby('x')['d1']

可以看出这里的变量

a 是一个

GroupBy 对象,可以认为它是做好了分组的中间数据。接下来我们就可以通过

mean() 方法计算平均值:

>>>a.mean()

x

a -0.399682

b 0.248158

Name: d1, dtype: float64

1

2

3

4

5

>>>a.mean()

x

a-0.399682

b0.248158

Name:d1,dtype:float64

结果表明,通过

x 分组后有

'a','b' 两组,最后得到两组的平均值。以上是通过一列进行分组,我们还可以指定多列分组:

>>>b = df.groupby(['x', 'y']).mean()

>>>b

d1 d2

x y

a one -0.040794 1.038264

two -1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值