Pandas Groupby Range of Values

92

Adakah metode yang mudah di panda untuk digunakan groupbypada berbagai peningkatan nilai? Misalnya diberikan contoh di bawah ini dapatkah saya bin dan kolom grup Bdengan 0.155kenaikan sehingga misalnya, beberapa grup pertama dalam kolom Bdibagi menjadi rentang antara '0 - 0,155, 0,155 - 0,31 ...'

import numpy as np
import pandas as pd
df=pd.DataFrame({'A':np.random.random(20),'B':np.random.random(20)})

     A         B
0  0.383493  0.250785
1  0.572949  0.139555
2  0.652391  0.401983
3  0.214145  0.696935
4  0.848551  0.516692

Atau saya dapat terlebih dahulu mengkategorikan data dengan kenaikan tersebut ke dalam kolom baru dan kemudian menggunakan groupbyuntuk menentukan statistik relevan yang mungkin berlaku di kolom A?

BJEBN
sumber

Jawaban:

132

Anda mungkin tertarik dengan pd.cut:

>>> df.groupby(pd.cut(df["B"], np.arange(0, 1.0+0.155, 0.155))).sum()
                      A         B
B                                
(0, 0.155]     2.775458  0.246394
(0.155, 0.31]  1.123989  0.471618
(0.31, 0.465]  2.051814  1.882763
(0.465, 0.62]  2.277960  1.528492
(0.62, 0.775]  1.577419  2.810723
(0.775, 0.93]  0.535100  1.694955
(0.93, 1.085]       NaN       NaN

[7 rows x 2 columns]
DSM
sumber
11
Apakah saya dapat melakukan ini untuk berbagai dimensi? Pada dasarnya mengelompokkan berdasarkan dua nilai secara bersamaan?
madsthaks
13

Coba ini:

df = df.sort('B')
bins =  np.arange(0,1.0,0.155)
ind = np.digitize(df['B'],bins)

print df.groupby(ind).head()

Tentu saja Anda dapat menggunakan fungsi apa pun di grup tidak hanya head.

Alvaro Fuentes
sumber