资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

Pandas如何使用GroupBy分组

这篇文章主要介绍 Pandas如何使用GroupBy分组,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

创新互联公司主要从事网站制作、网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务瑶海,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

groupby对象

import pandas as pd
import numpy as np
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',                              'foo', 'bar', 'foo', 'foo'],                       'B' : ['one', 'one', 'two', 'three',                              'two', 'two', 'one', 'three'],                       'C' : np.random.randn(8),                       'D' : np.random.randn(8)})
gb.groupby('A')
print(df.groupby('A'))

In [26]: gb.
gb.agg        gb.boxplot    gb.cummin     gb.describe   gb.filter     gb.get_group  gb.height     gb.last       gb.median     gb.ngroups    gb.plot       gb.rank       gb.std        gb.transform
gb.aggregate  gb.count      gb.cumprod    gb.dtype      gb.first      gb.groups     gb.hist       gb.max        gb.min        gb.nth        gb.prod       gb.resample   gb.sum        gb.var
gb.apply      gb.cummax     gb.cumsum     gb.fillna     gb.gender     gb.head       gb.indices    gb.mean       gb.name       gb.ohlc       gb.quantile   gb.size       gb.tail       gb.weight

分组迭代Iterating through groups

In [41]: grouped = df.groupby('A')

In [42]: for name, group in grouped:
   ....:        print(name)
   ....:        print(group)
   ....: 
bar
     A      B         C         D1  bar    one -0.042379 -0.0893293  bar  three -0.009920 -0.9458675  bar    two  0.495767  1.956030foo
     A      B         C         D0  foo    one -0.919854 -1.1313452  foo    two  1.247642  0.3378634  foo    two  0.290213 -0.9321326  foo    one  0.362949  0.0175877  foo  three  1.548106 -0.016692

获得一个分组get_group

In [44]: grouped.get_group('bar')Out[44]: 
     A      B         C         D1  bar    one -0.042379 -0.0893293  bar  three -0.009920 -0.9458675  bar    two  0.495767  1.956030

使用多种函数agg()

相同的函数

In [56]: grouped = df.groupby('A')In [57]: grouped['C'].agg([np.sum, np.mean, np.std])Out[57]: 
          sum      mean       stdA                                
bar  0.443469  0.147823  0.301765foo  2.529056  0.505811  0.966450

不同的函数

In [60]: grouped.agg({'C' : np.sum,
   ....:              'D' : lambda x: np.std(x, ddof=1)})
   ....: 
Out[60]: 
            C         D
A                      
bar  0.443469  1.490982foo  2.529056  0.645875

转变数据框transformation

转变函数(transform)中需要返回一个和分组块(group chunk)同样大小的结果,比如我们需要标准化每一个分组的数据:

In [66]: index = pd.date_range('10/1/1999', periods=1100)

In [67]: ts = pd.Series(np.random.normal(0.5, 2, 1100), index)

In [68]: ts = ts.rolling(window=100,min_periods=100).mean().dropna()
In [71]: key = lambda x: x.year#使用年来分组In [72]: zscore = lambda x: (x - x.mean()) / x.std()#标准化In [73]: transformed = ts.groupby(key).transform(zscore)#使用索引的年份来分组,然后标准化各组数据In [80]: compare = pd.DataFrame({'Original': ts, 'Transformed': transformed})# 做出图形

Pandas如何使用GroupBy分组

过滤Filtration

filter方法返回一个子集(subset)。比如我们只想要组长度大于2的分组:

In [105]: dff = pd.DataFrame({'A': np.arange(8), 'B': list('aabbbbcc')})

In [106]: dff.groupby('B').filter(lambda x: len(x) > 2)
Out[106]: 
   A  B2  2  b3  3  b4  4  b5  5  b

灵活运用apply

In [123]: df
Out[123]: 
     A      B         C         D0  foo    one -0.919854 -1.1313451  bar    one -0.042379 -0.0893292  foo    two  1.247642  0.3378633  bar  three -0.009920 -0.9458674  foo    two  0.290213 -0.9321325  bar    two  0.495767  1.9560306  foo    one  0.362949  0.0175877  foo  three  1.548106 -0.016692In [124]: grouped = df.groupby('A')# could also just call .describe()In [125]: grouped['C'].apply(lambda x: x.describe())
Out[125]: 
A         
bar  count    3.000000 mean     0.147823 std      0.301765 min     -0.042379 25%     -0.026149 50%     -0.009920 75%      0.242924...   
foo  mean     0.505811 std      0.966450 min     -0.919854 25%      0.290213 50%      0.362949 75%      1.247642 max      1.548106Name: C, dtype: float64

以上是“ Pandas如何使用GroupBy分组”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


本文名称:Pandas如何使用GroupBy分组
当前链接:http://cdkjz.cn/article/posjhg.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220