4. 自定义聚合函数

  1. In[22]: college = pd.read_csv('data/college.csv')
  2. college.head()
  3. Out[22]:

4. 自定义聚合函数 - 图1

  1. # 求出每个州的本科生的平均值和标准差
  2. In[23]: college.groupby('STABBR')['UGDS'].agg(['mean', 'std']).round(0).head()
  3. Out[23]:

4. 自定义聚合函数 - 图2

  1. # 远离平均值的标准差的最大个数,写一个自定义函数
  2. In[24]: def max_deviation(s):
  3. std_score = (s - s.mean()) / s.std()
  4. return std_score.abs().max()
  5. # agg聚合函数在调用方法时,直接引入自定义的函数名
  6. In[25]: college.groupby('STABBR')['UGDS'].agg(max_deviation).round(1).head()
  7. Out[25]: STABBR
  8. AK 2.6
  9. AL 5.8
  10. AR 6.3
  11. AS NaN
  12. AZ 9.9
  13. Name: UGDS, dtype: float64

更多

  1. # 自定义的聚合函数也适用于多个数值列
  2. In[26]: college.groupby('STABBR')['UGDS', 'SATVRMID', 'SATMTMID'].agg(max_deviation).round(1).head()
  3. Out[26]:

4. 自定义聚合函数 - 图3

  1. # 自定义聚合函数也可以和预先定义的函数一起使用
  2. In[27]: college.groupby(['STABBR', 'RELAFFIL'])['UGDS', 'SATVRMID', 'SATMTMID']\
  3. .agg([max_deviation, 'mean', 'std']).round(1).head()
  4. Out[27]:

4. 自定义聚合函数 - 图4

  1. # Pandas使用函数名作为返回列的名字;你可以直接使用rename方法修改,或通过__name__属性修改
  2. In[28]: max_deviation.__name__
  3. Out[28]: 'max_deviation'
  4. In[29]: max_deviation.__name__ = 'Max Deviation'
  5. In[30]: college.groupby(['STABBR', 'RELAFFIL'])['UGDS', 'SATVRMID', 'SATMTMID']\
  6. .agg([max_deviation, 'mean', 'std']).round(1).head()
  7. Out[30]:

4. 自定义聚合函数 - 图5