2013-07-03 9 views
5

ja powoli z R do pytona + pandy, a ja w obliczu problemu nie można rozwiązać ...pandy - dodać kolumnę z wartością na podstawie exisitng jednego (kosze, qcut)

Potrzebuję dyskretyzować wartości z jednej kolumny, przypisując je do pojemników i dodając kolumnę z tymi nazwami bin do oryginalnego DataFrame. Próbuję użyć pandas.qcut, ale wynikowy obiekt Categorical wydaje się nie grać dobrze z DataFrame.

Przykład:

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

Teraz gdy próbuje wywołać describe na df1 nie widzę nową kolumnę:

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

jednak najwyraźniej jest tam:

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

Co ja robię źle? Moim pożądanym wynikiem jest uzyskanie kolumny z 4 unikalnymi wartościami ciągów opisującymi pojemniki (jak czynniki w R).


EDIT:

Jak słusznie zauważony przez Dana metoda summary() nie pokaże kolumnę z danymi tekstowymi tylko i tak tajemniczy problem jest rozwiązany :) Dzięki wielkie!

Odpowiedz

3

Nigdy nie byłem użytkownikiem R, ale jeśli cię rozumiem, chcesz pogrupować dane w kosze i opisać każdy pojemnik.

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 

Aby uniknąć Categoricals całkowicie patrz https://stackoverflow.com/a/17150734/1221924

+0

Niezupełnie, w rzeczywistości jestem po prostu zastanawiasz się, dlaczego nowy 'binned_a' kolumna nie jest wyświetlana w' wyniku describe' ... Jednak ja próbowałem zrobić 'df1 ['binned_a'] = pd.Series (pd.qcut (df1 ['a'], 4))' i nadal nie ma wyniku ... –

+1

"Bins" w '' binned_a'' są ciągami , więc '' describe() '' ignoruje je. Czy dokładnie o pojemnikach chciałbyś opisać? –

+0

Ahhh, istotnie ... Myślałem, że gdy kolumna nie jest wyświetlana w "opisz()", to coś jest nie tak (w kolumnie tekstu R są również wyświetlane w podsumowaniu) ... Teraz wydaje się jasne, dzięki dużo! –

Powiązane problemy