2016-07-11 8 views
2

は、私は、次のデータフレームを持っていると、インデックスは年齢を表して言う、グループ化行のpythonパンダ

私はグループの年齢層の中にしたいと思います...列名は、いくつかのカテゴリであり、フレームの値は周波数でありますさまざまな方法(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 

私は何かのようで終わるしたいと思います...

  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 ... ... ... 

が行うためのシンプルかつ効率的な方法はありますこの?

すべてのヘルプは大歓迎です...

答えて

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() 

出力:

   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 
関連する問題