2013-07-03 8 views
5

Sto lentamente muovendo da R a pitone + panda, e sto di fronte a un problema che non riesco a risolvere ...panda - aggiungere una colonna con valore basato su una exisitng (bidoni, qCut)

Ho bisogno di discretizzare i valori da una colonna, assegnandoli ai raccoglitori e aggiungendo una colonna con quei nomi dei cassetti all'originale DataFrame. Sto cercando di utilizzare pandas.qcut, ma l'oggetto Categorical risultante sembra non giocare bene con DataFrame.

Un esempio:

import pandas as pd 
df1 = pd.DataFrame(np.random.randn(10), columns=['a']) 
df1['binned_a'] = pd.qcut(df1['a'],4) 

Ora, quando provo a invocare describe su df1 non riesco a vedere la nuova colonna:

>>> df1.describe() 
       a 
count 10.000000 
mean 0.594072 
std  1.109981 
min -0.807307 
25% -0.304550 
50%  0.545839 
75%  1.189487 
max  2.851922 

Tuttavia, a quanto pare c'è:

>>> df1 
      a   binned_a 
0 0.190015 (-0.305, 0.546] 
1 0.140227 (-0.305, 0.546] 
2 1.380000 (1.189, 2.852] 
3 -0.522530 [-0.807, -0.305] 
4 -0.452810 [-0.807, -0.305] 
5 2.851922 (1.189, 2.852] 
6 -0.807307 [-0.807, -0.305] 
7 0.901663 (0.546, 1.189] 
8 1.010334 (0.546, 1.189] 
9 1.249205 (1.189, 2.852] 

Che cosa sto facendo di sbagliato? Il mio risultato desiderato è ottenere una colonna con 4 valori di stringa univoci che descrivono i bin (come i fattori in R).


EDIT:

Come giustamente notato da Dan, il metodo summary() non mostrerà colonna con i dati di solo testo e quindi il problema è risolto misterioso :) Grazie mille!

risposta

3

Non sono mai stato un utente R, ma se ti capisco, vuoi raggruppare i dati in contenitori e descrivere ogni cestino.

In [9]: df.groupby('binned_a').describe().unstack() 
Out[9]:    a             \ 
        count  mean  std  min  25%  50% 
binned_a                  
(-0.113, 0.109]  2 0.025114 0.010264 0.017856 0.021485 0.025114 
(-0.337, -0.113]  2 -0.282838 0.056445 -0.322751 -0.302794 -0.282838 
(0.109, 0.563]  3 0.354481 0.214402 0.134978 0.250027 0.365076 
[-1.842, -0.337]  3 -1.003969 0.765167 -1.841622 -1.335073 -0.828523 


        75%  max 
binned_a        
(-0.113, 0.109] 0.028742 0.032371 
(-0.337, -0.113] -0.262882 -0.242925 
(0.109, 0.563] 0.464233 0.563390 
[-1.842, -0.337] -0.585142 -0.341762 

Per evitare categorici del tutto, vedere https://stackoverflow.com/a/17150734/1221924

+0

Non proprio, anzi mi chiedo solo perché il nuovo 'colonna di binned_a' non è visualizzato nel risultato' describe' ... Tuttavia, ho provato a fare 'df1 ['binned_a'] = pd.Series (pd.qcut (df1 ['a'], 4))' e ancora nessun risultato ... –

+1

I "bin" in "binned_a'' sono stringhe , quindi '' describe() '' li sta ignorando. Vuoi esattamente dei bidoni che vorresti descrivere? –

+0

Ahhh, infatti ... ho pensato che quando una colonna non viene mostrata in 'describe()' allora qualcosa non va (in R le colonne di testo sono anche mostrate in summery) ... Quindi sembra essere chiaro ora, grazie Un sacco! –

Problemi correlati