[Py013] 理解pandas groupby

今天浏览pandas文档,原文见http://pandas.pydata.org/pandas-docs/stable/groupby.html。

当读到pandas objects can be split on any of their axes. The abstract definition of grouping is to provide a mapping of labels to group names. 时,有种醍醐灌顶的感觉。

之前一直对groupby 的使用不能得心应手,

现在突然醒悟了,其实最重要的就是传递一系列标签给函数。

这些标签都涉及方面呢?

  1. function:作用于行列名
  1. list或array:长度需要同待分组的行或者列相同
  2. dict或Series:针对行列名
  3. string:适用于dataframe,匹配行名或列名;df.groupby('A')等同于df.groupby(df['A'])

这些标签的作用是将不同的行(列)区分开(如何确定你的groupby是按照行,还是按照列拆分表格?可以看 Py010)。

例如,设定一个函数,作用于列名,将含有元音字符的列名挑出来

In[34]: def get_letter_type(letter):
   ...:      if letter.lower() in 'aeiou':
   ...:          return 'vowel'
   ...:      else:
   ...:          return 'consonant'
   ...:      
In[35]: grouped = df.groupby(get_letter_type, axis=1) #将上面定义的函数作用于列名
    
In[38]: grouped.groups #可以看到不同的列名被打上了不同的标签
Out[38]: 
{'consonant': Index(['B', 'C', 'D'], dtype='object'),
 'vowel': Index(['A'], dtype='object')}

# 通过人为添加的标签,可以将对应的列挑选出来
In[36]: grouped.get_group('vowel')
Out[36]: 
     A
0  foo
1  bar
2  foo
3  bar
4  foo
5  bar
6  foo
7  foo
In[37]: grouped.get_group('consonant')
Out[37]: 
       B         C         D
0    one -0.828158 -0.194829
1    one  1.019744 -1.526427
2    two -0.423719 -0.591102
3  three  2.053659 -1.536986
4    two  0.382964  0.887569
5    two -0.454750 -0.167476
6    one  0.689482  0.267907
7  three -0.443173 -1.928660

dict或Series的例子,可以参考这个https://blog.csdn.net/qq_36076233/article/details/77849037

其余的就不一一列举了

总之使用groupby的中心思想就是(我目前认为哈)

想办法传递一个可以去匹配列名或者行名的匹配关系

也就是给行名或者列名打上标签

你可能感兴趣的:([Py013] 理解pandas groupby)