python处理分组_python – 链接分组,过滤和聚合

本文介绍如何在Python中使用pandas对数据进行分组、过滤和聚合操作。通过实例展示了如何利用groupby、filter、value_counts等方法进行数据处理,并探讨了不同方法在性能上的差异。例如,通过过滤器应用筛选满足条件的分组,或者先计数再过滤数据,以及在过滤前后的两次groupby操作。此外,还提到了一种针对已分组数据的过滤技巧,以提高效率。
摘要由CSDN通过智能技术生成

这是一些可重现的数据:

np.random.seed(0)

df = pd.DataFrame(np.random.randint(0,10,(10,2)),columns=list('AB'))

>>> df

A B

0 5 0

1 3 3

2 7 9

3 3 5

4 2 4

5 7 6

6 8 8

7 1 6

8 7 7

9 8 1

一个示例过滤器应用程序,演示它可以处理数据.

gb = df.groupby('A')

>>> gb.filter(lambda group: group.A.count() >= 3)

A B

2 7 9

5 7 6

8 7 7

以下是您的一些选择:

1)您也可以先根据值计数进行过滤,然后再进行分组.

vc = df.A.value_counts()

>>> df.loc[df.A.isin(vc[vc >= 2].index)].groupby('A').mean()

B

A

3 4.000000

7 7.333333

8 4.500000

2)在过滤器之前和之后执行两次groupby:

>>> (df.groupby('A',as_index=False)

.filter(lambda group: group.A.count() >= 2)

.groupby('A')

.mean())

B

A

3 4.000000

7 7.333333

8 4.500000

3)假设你的第一个groupby返回组,你也可以过滤那些:

d = {k: v

for k,v in df.groupby('A').groups.items()

if len(v) >= 2} # gb.groups.iteritems() for Python 2

>>> d

{3: [1,3],7: [2,5,8],8: [6,9]}

这有点像黑客,但应该相对有效,因为你不需要重新组合.

>>> pd.DataFrame({col: [df.ix[d[col],'B'].mean()] for col in d}).T.rename(columns={0: 'B'})

B

3 4.000000

7 7.333333

8 4.500000

时间为100k排

np.random.seed(0)

df = pd.DataFrame(np.random.randint(0,(100000,columns=list('AB'))

%timeit df.groupby('A',as_index=False).filter(lambda group: group['A'].count() >= 5).groupby('A').mean()

100 loops,best of 3: 18 ms per loop

%%timeit

vc = df.A.value_counts()

df.loc[df.A.isin(vc[vc >= 2].index)].groupby('A').mean()

100 loops,best of 3: 15.7 ms per loop

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值