2016-07-11 16 views
2

sagen, ich habe folgende Datenrahmen und der Index altert, ist die Spaltennamen einige Kategorie, und die Werte in den Rahmen sind Frequenzen ...Gruppierung Zeilen Python Pandas

Nun möchte Ich mag Alter zu einer Gruppe in verschiedene Art und Weise (2 Jahre Bins, 5 Jahre Bins und 10 Jahre Bins)

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

Ich mag würde mit etwas, um am Ende wie ...

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

gibt es eine einfache und effiziente Art und Weise zu tun, Dies?

Jede Hilfe wird sehr geschätzt ...

Antwort

7

Verwenden pd.cut() die Alters Bins und gruppieren Sie Ihre Datenrahmen mit ihnen zu erstellen.

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

Ausgang:

   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 
Verwandte Themen