Nhóm gấu trúc theo phạm vi giá trị


92

Có một phương pháp dễ dàng trong gấu trúc để gọi groupbytrên một loạt các giá trị gia tăng không? Ví dụ, với ví dụ dưới đây, tôi có thể gộp và nhóm cột Bvới số 0.155gia tăng để ví dụ: một vài nhóm đầu tiên trong cột Bđược chia thành các phạm vi trong khoảng từ '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

Ngoài ra, trước tiên tôi có thể phân loại dữ liệu theo các gia số đó vào một cột mới và sau đó sử dụng groupbyđể xác định bất kỳ thống kê liên quan nào có thể áp dụng trong cột A?

Câu trả lời:


132

Bạn có thể quan tâm 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
Tôi có thể làm điều này cho nhiều chiều không? Thực chất nhóm theo hai giá trị đồng thời?
madsthaks

13

Thử đi:

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

print df.groupby(ind).head()

Tất nhiên bạn có thể sử dụng bất kỳ chức năng nào trên các nhóm không chỉ head.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.