分组行python pandas

Qua*_*eye 2 python dataframe pandas

说我有以下数据框,索引代表年龄,列名是某个类别,框架中的值是频率......

现在我想以各种方式分组年龄(2年箱,5年箱和10年箱)

>>> table_w
      1    2    3    4
20  1000   80   40  100
21  2000   40  100  100
22  3000   70   70  200
23  3000  100   90  100
24  2000   90   90  200
25  2000  100   80  200
26  2000   90   60  100
27  1000  100   30  200
28  1000  100   90  100
29  1000   60   70  100
30  1000   70  100  100
31   900   40  100   90
32   700  100   30  100
33   700   30   50   90
34   600   10   40  100
Run Code Online (Sandbox Code Playgroud)

我想结束像......

           1    2    3    4
20-21    3000  ...  ...  ...
22-23    6000  ...  ...  ...
24-25    4000  ...  ...  ...
26-27    3000  ...  ...  ...
28-29    2000  ...  ...  ...
30-31    1900  ...  ...  ...
32-33    1400  ...  ...  ...
34        600  ...  ...  ...
Run Code Online (Sandbox Code Playgroud)

有一种简单有效的方法吗?

任何帮助是极大的赞赏...

Alb*_*oso 7

使用pd.cut()与他们创造的年龄箱和组数据帧的.

import io

import numpy as np
import pandas as pd

data = io.StringIO("""\
       1    2    3    4
20  1000   80   40  100
21  2000   40  100  100
22  3000   70   70  200
23  3000  100   90  100
24  2000   90   90  200
25  2000  100   80  200
26  2000   90   60  100
27  1000  100   30  200
28  1000  100   90  100
29  1000   60   70  100
30  1000   70  100  100
31   900   40  100   90
32   700  100   30  100
33   700   30   50   90
34   600   10   40  100
""")
df = pd.read_csv(data, delim_whitespace=True)

bins = np.arange(20, 37, 2)
df.groupby(pd.cut(df.index, bins, right=False)).sum()
Run Code Online (Sandbox Code Playgroud)

输出:

             1    2    3    4
[20, 22)  3000  120  140  200
[22, 24)  6000  170  160  300
[24, 26)  4000  190  170  400
[26, 28)  3000  190   90  300
[28, 30)  2000  160  160  200
[30, 32)  1900  110  200  190
[32, 34)  1400  130   80  190
[34, 36)   600   10   40  100
Run Code Online (Sandbox Code Playgroud)