web-dev-qa-db-fra.com

Pandas Groupby Range of Values

Existe-t-il une méthode simple dans pandas pour appeler groupby sur une plage d'incréments de valeurs?? Par exemple, dans l'exemple ci-dessous, puis-je regrouper la colonne B avec une 0.155 incrémentation de sorte que, par exemple, les premiers groupes de la colonne B soient divisés en plages comprises entre '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

Sinon, je pourrais d'abord classer les données en fonction de ces incréments dans une nouvelle colonne, puis utiliser groupby pour déterminer les statistiques pertinentes éventuellement applicables dans la colonne A?

67
BJEBN

Vous pourriez être intéressé par 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]
104
DSM

Essaye ça:

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

print df.groupby(ind).head()

Bien sûr, vous pouvez utiliser n'importe quelle fonction sur les groupes et pas seulement head.

10
Alvaro Fuentes