Groupe de pandas par plage de valeurs


92

Existe-t-il une méthode simple dans les pandas pour appeler groupbysur une plage d'incréments de valeurs? Par exemple, étant donné l'exemple ci-dessous, puis-je classer et regrouper la colonne Bavec un 0.155incrément de sorte que, par exemple, le premier couple de groupes de la colonne Bsoit divisé 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 par ces incréments dans une nouvelle colonne et ensuite les utiliser groupbypour déterminer les statistiques pertinentes qui peuvent être applicables dans la colonne A?

Réponses:


132

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]

11
Est-il possible pour moi de faire cela pour plusieurs dimensions? Regrouper essentiellement par deux valeurs simultanément?
madsthaks

13

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 non seulement head.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.