2017-01-31 3 views
3

Ich habe Datenrahmen unten.Binning und Umwandlung in Pandas

A B 
1 1 
4 1 
5 1 
6 2 
8 3 
15 4 

Ich möchte Binning und transformieren Datenrahmen nach unten.

range(A) sum(B) 
[0,4) 2 
[5,9) 6 
[10,14) 0 
[15,19) 4 

Ich versuchte groupby+Grouper, aber ich konnte nicht herausfinden, wie bin zu.

Kann ich fragen, wie man Daten transformiert?

Antwort

4

Sie benötigen cut mit Parametern right=False für nicht richtig Behälter mit groupby sind:

Danke John Galt für Idee Parameter labels hinzuzufügen.

print (pd.cut(df['A'], 
       bins=[0, 5, 10, 15, 20], 
       labels=['[0,4)', '[5,9)', '[10,14)', '[15,19)'], 
       right=False)) 
0  [0,4) 
1  [0,4) 
2  [5,9) 
3  [5,9) 
4  [5,9) 
5 [15,19) 
Name: A, dtype: category 

df = df.groupby([pd.cut(df['A'], bins=[0, 5, 10, 15, 20], 
         labels=['[0,4)', '[5,9)', '[10,14)', '[15,19)'], 
         right=False)]) 
     .B.sum() 
     .fillna(0) 
     .reset_index() 

df.columns = ['range(A)','sum(B)'] 
print (df) 
    range(A) sum(B) 
0 [0,4)  2.0 
1 [5,9)  6.0 
2 [10,14)  0.0 
3 [15,19)  4.0 
+1

Sie hinzufügen könnte 'Etiketten =' auf 'pd.cut' für die gewünschte Kennzeichnung sowie -' pd.cut (df.A, [0, 5, 10, 15, 20], rechts = False , Etiketten = ['[0,4)', '[5,9)', '[10,14)', '[15,19)']) ' – Zero

+1

@JohnGalt - sehr nette Idee, gib mir eine Sekunde . – jezrael