0
votes

Somme une colonne en gamme d'une autre colonne

Voici mon problème:

Dans mon Dataframe, j'ai deux cols: km et valeur p> xxx pré>

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


4 commentaires

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


5 Réponses :


-2
votes

Vous avez besoin d'opérateurs booléens: xxx


0 commentaires

-1
votes

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


0 commentaires

1
votes

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)


0 commentaires

2
votes

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


1 commentaires

Vous pouvez construire vos bacs plus succinctement à l'aide de bacs = pd.interval_range (DF ['km']. Min () - 1, DF ['km']. Max (), FREQ = 3)



1
votes

ma solution pd.cut xxx


0 commentaires