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?

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]

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.