Voici mon problème:
Dans mon Dataframe, j'ai deux cols: km et valeur p> et j'aimerais faire une somme de valeur de la gamme de km
Comme une somme de valeur pour 1 J'ai essayé ceci: p> Total value for 1 at 3 kms : 15
Total value for 3 at 6 kms : 0
Total value for 6 at 9 kms : 0
Total value for 9 at 12 kms : 2
5 Réponses :
Vous avez besoin d'opérateurs booléens:
Utilisez pd.interval_range Code> + PD. CUT CODE> :
km (0, 3] 15 (3, 6] 0 (6, 9] 0 (9, 12] 2 Name: value, dtype: int64
Ma solution est similaire à celle d'Ansev, sauf que j'ai interprété votre groupe un peu différemment.
df['bin'] = (df['km']/3).astype(int)
df[['bin','value']].groupby('bin').agg(sum)
Si vous voulez tous les intervalles:
width = 3
min_val = dvf['km'].min() - 1
max_val = dvf['km'].max()
bins = pd.IntervalIndex.from_tuples([(x, x+width) for x in range(min_val, max_val, width)])
dvf.groupby(pd.cut(dvf['km'], bins = bins))['value'].agg('sum')
>>> output
km
(0, 3] 15
(3, 6] 0
(6, 9] 0
(9, 12] 2
Vous pouvez construire vos bacs plus succinctement à l'aide de bacs = pd.interval_range (DF ['km']. Min () - 1, DF ['km']. Max (), FREQ = 3) CODE>
ma solution pd.cut code>
Comment définissez-vous la gamme pour le km?
@DPER fait éditer
Pouvez-vous poster une sortie souhaitée? Essayez-vous d'effectuer une opération de fenêtrage?
Vous avez un problème logique ici, 1-3 que vous avez considéré 3 en elle et 1 en cela aussi, mais 3-6 vous n'avez pas envisagé de 3