七、 分组

对于”group by”操作,我们通常是指以下一个或多个操作步骤:

  • (Splitting)按照一些规则将数据分为不同的组;

  • (Applying)对于每组数据分别执行一个函数;

  • (Combining)将结果组合到一个数据结构中;

详情请参阅:Grouping section

  1. In [91]: df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
  2. ....: 'foo', 'bar', 'foo', 'foo'],
  3. ....: 'B' : ['one', 'one', 'two', 'three',
  4. ....: 'two', 'two', 'one', 'three'],
  5. ....: 'C' : np.random.randn(8),
  6. ....: 'D' : np.random.randn(8)})
  7. ....:
  8. In [92]: df
  9. Out[92]:
  10. A B C D
  11. 0 foo one -1.202872 -0.055224
  12. 1 bar one -1.814470 2.395985
  13. 2 foo two 1.018601 1.552825
  14. 3 bar three -0.595447 0.166599
  15. 4 foo two 1.395433 0.047609
  16. 5 bar two -0.392670 -0.136473
  17. 6 foo one 0.007207 -0.561757
  18. 7 foo three 1.928123 -1.623033

1、 分组并对每个分组执行sum函数:

  1. In [93]: df.groupby('A').sum()
  2. Out[93]:
  3. C D
  4. A
  5. bar -2.802588 2.42611
  6. foo 3.146492 -0.63958

2、 通过多个列进行分组形成一个层次索引,然后执行函数:

  1. In [94]: df.groupby(['A','B']).sum()
  2. Out[94]:
  3. C D
  4. A B
  5. bar one -1.814470 2.395985
  6. three -0.595447 0.166599
  7. two -0.392670 -0.136473
  8. foo one -1.195665 -0.616981
  9. three 1.928123 -1.623033
  10. two 2.414034 1.600434