2016-09-24 3 views
0

Ich habe einen Datenrahmen df, aus dem ich eine Spalte mpg extrahieren.Gruppieren Sie Daten in Klassen mit numpy

Ich möchte Klassenlabel/Namen zu jeder Zeile basierend auf dem Wert mpg hinzufügen.

Ich habe es mit

getan
mpg = df.iloc[:,0] 

median = np.percentile(mpg, q=50) 
upper_quartile = np.percentile(mpg, q=75) 
lower_quartile = np.percentile(mpg, q=25) 

mpg_class = np.ones((num_observations, 1)) 

for i, element in enumerate(X): 
    mpg = element[0] 
    if mpg >= upper_quartile: 
     mpg_class[i] = 3 
    elif mpg >= median: 
     mpg_class[i] = 2 
    elif mpg >= lower_quartile: 
     mpg_class[i] = 1 
    else: 
     mpg_class[i] = 0 

aber ich frage mich, ob es möglich ist, mit numpy Weise intelligenter zu tun? Ich denke, es könnte möglich sein, es mit np.where oder etwas in der Art zu tun.

+0

Könnten Sie einen Beispielfall hinzufügen? Was ist 'X'? – Divakar

+0

'X' ist ein Pandas Datenframe mit vielen Variablen, aber ich bin nur besorgt über den Vektor' mpg = df.iloc [:, 0] 'was nur die erste Spalte ist, die float Werte zwischen' 10.0' und '90.0 enthält '. – Jamgreen

+0

Suchst du nach [Pandas 'Cut()?] (Http://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html) –

Antwort

3

Scheint, wie Sie für pd.qcut suchen:

pd.qcut(df.iloc[:, 0], [0, 0.25, 0.5, 0.75, 1], [0, 1, 2, 3]) 
Out: 
0  1 
1  0 
2  1 
3  0 
4  0 
5  0 
6  0 
... 

Der erste Parameter ist die Serie Sie diskretisiert wollen. Die zweite ist die Quantile/Perzentile. Die letzte ist die Etiketten (von 0 bis 25% - 0, 25% bis 50% - 1, etc.)

+0

Genau das, was ich wollte. Vielen Dank! – Jamgreen