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
?
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]
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
.