2017-07-24 36 views
5

Tôi có khung cột dữ liệu với giá trị sốbinning cột với gấu trúc python

df['percentage'].head() 
46.5 
44.2 
100.0 
42.12 

Tôi muốn nhìn thấy các cột như đếm bin:

bins = [0, 1, 5, 10, 25, 50, 100] 

Làm thế nào tôi có thể có thể nhận được kết quả như bin với nó values count:

[0, 1] bin amount 
[1, 5] etc 
[5, 10] etc 
...... 

Trả lời

14

Bạn có thể sử dụng pandas.cut:

bins = [0, 1, 5, 10, 25, 50, 100] 
df['binned'] = pd.cut(df['percentage'], bins) 
print (df) 
    percentage  binned 
0  46.50 (25, 50] 
1  44.20 (25, 50] 
2  100.00 (50, 100] 
3  42.12 (25, 50] 

bins = [0, 1, 5, 10, 25, 50, 100] 
labels = [1,2,3,4,5,6] 
df['binned'] = pd.cut(df['percentage'], bins=bins, labels=labels) 
print (df) 
    percentage binned 
0  46.50  5 
1  44.20  5 
2  100.00  6 
3  42.12  5 

Hoặc numpy.searchsorted:

bins = [0, 1, 5, 10, 25, 50, 100] 
df['binned'] = np.searchsorted(bins, df['percentage'].values) 
print (df) 
    percentage binned 
0  46.50  5 
1  44.20  5 
2  100.00  6 
3  42.12  5 

... và sau đó value_counts hoặc groupby và tổng hợp size:

s = pd.cut(df['percentage'], bins=bins).value_counts() 
print (s) 
(25, 50]  3 
(50, 100] 1 
(10, 25]  0 
(5, 10]  0 
(1, 5]  0 
(0, 1]  0 
Name: percentage, dtype: int64 

s = df.groupby(pd.cut(df['percentage'], bins=bins)).size() 
print (s) 
percentage 
(0, 1]  0 
(1, 5]  0 
(5, 10]  0 
(10, 25]  0 
(25, 50]  3 
(50, 100] 1 
dtype: int64 

Theo mặc định cut return categorical.

Series phương pháp như Series.value_counts() sẽ sử dụng tất cả các danh mục, ngay cả khi một số danh mục không có trong dữ liệu, operations in categorical.

Các vấn đề liên quan