Pandas groupby agg\sort

   有时候在使用pandas groupby 分组聚合是有分组后排序的问题(groupby sort)、取前n名(nlargest)、复合索引排序(multiIndex_sort)的需求,那么下面就常用的几个需求举例:

1、pandas 分组后排序,本质是multiIndex_sort问题(sorting each row in a multi index DataFrame):

  ```

import pandas as pd

import numpy as np

row_idx_arr = list(zip(['r0', 'r0', 'r0', 'r1', 'r1', 'r1', 'r2', 'r2', 'r2', 'r3', 'r3', 'r3'], ['r-00', 'r-01', 'r-02', 'r-00', 'r-01', 'r-02', 'r-00', 'r-01', 'r-02', 'r-00', 'r-01', 'r-02', ]))row_idx = pd.MultiIndex.from_tuples(row_idx_arr)d = pd.DataFrame((np.random.randn(36)*10).reshape(12,3), index=row_idx, columns=['c0', 'c1', 'returns'])

d = pd.DataFrame((np.random.randn(36)*10).reshape(12,3), index=row_idx, columns=['c0', 'c1', 'returns'])

print (d)

                c0        c1    returns

r0 r-00 -13.417493 -14.758075  -3.650524  r-01  1.092054  -1.224499  -8.968738  r-02  4.793562  -9.958708 -16.554163r1 r-00  -0.308835  -4.584725  -4.070714  r-01 -23.764872  0.240768 -24.110720  r-02  -4.054037  7.744689  12.762280r2 r-00  9.160783 -16.041333  10.865837  r-01 -10.472071  -1.625311  17.091514  r-02 -13.009323  1.114351  -3.494279r3 r-00  7.537877 -17.307256  -2.739447  r-01  -1.107766  1.458901 -19.214064  r-02  8.473581  -7.456646  1.427752df = d.groupby(level=0, group_keys=False).apply(lambda x: x.nlargest(2, ['returns']))print df

                c0        c1    returns

r0 r-00 -13.417493 -14.758075  -3.650524  r-01  1.092054  -1.224499  -8.968738r1 r-02  -4.054037  7.744689  12.762280  r-00  -0.308835  -4.584725  -4.070714r2 r-01 -10.472071  -1.625311  17.091514  r-00  9.160783 -16.041333  10.865837r3 r-02  8.473581  -7.456646  1.427752  r-00  7.537877 -17.307256  -2.739447

```

你可能感兴趣的:(Pandas groupby agg\sort)