2017-07-24 38 views
5

mam danych kolumny ramka z wartościami liczbowymiBinning kolumna z pand Pythona

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

Chcę zobaczyć kolumnę jako liczby BIN:

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

Jak mogę można uzyskać wynik w postaci kosza z jego values count:

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

Odpowiedz

14

można użyć 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 

Albo 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 

... a potem value_counts lub groupby i kruszywo 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 

Domyślnie cut zamian categorical.

Series metody takie jak Series.value_counts() będą używać wszystkich kategorii, nawet jeśli niektóre kategorie nie występują w danych, operations in categorical.