2016-07-10 4 views
1

J'ai un REQT., Où je veux bin une valeur numériquepandas géants python Binning plage numérique

If the student marks is 
b/w 0-50 (incl 50) then assign the level column value = "L" 
b/w 50-75(incl. 75) then assign the level column value ="M" 
>75 then assign the level column value ="H" 

Voici ce que j'ai

raw_data = {'student':['A','B','C'],'marks_maths':[75,90,99]} 
df = pd.DataFrame(raw_data, columns = ['student','marks_maths']) 
bins = [0,50,75,>75] 
groups = ['L','M','H'] 
df['maths_level'] = pd.cut(df['marks_maths'], bins, labels=groups) 

Je reçois une erreur de syntaxe

File "<ipython-input-25-f0b9dd609c63>", line 3 
    bins = [0,50,75,>75] 
        ^
SyntaxError: invalid syntax 

Comment est-ce que je peux référencer un seuil qui indique> certaine valeur?

Répondre

2

Essayez ceci:

bins = [0,50,75,101] or bins = [0,50,75,np.inf] 
+0

le maximum pourrait être 101 ou 1000 .. je ne sais pas .. donc je veux juste mettre une condition qu'il est> certaine valeur – pmv

+0

J'ai initialement mis cette réponse, mais cela n'a pas de sens. Vous ne pouvez pas avoir d'affectation dans une instruction 'or'. Que vouliez-vous dire ici? –

+0

@Ami De quoi parlez-vous? Le 'ou' est 'anglais' ou ', pas code' ou ' – Merlin

0

juste définir la limite supérieure de la meilleure note possible:

bins = [0, 50, 75, 100] 

Le résultat est que vous attendez:

student marks_maths maths_level 
0  A   75   M 
1  B   90   H 
2  C   99   H 
+0

Vous pouvez également utiliser np.inf si vous ne voulez pas de limite. – ayhan

+0

la gamme supérieure peut être quelque chose .. il peut être 100 ou 1000.i ne sais pas la valeur max/upper – pmv

1

Hope this helps

import numpy as np 
import pandas as pd 

# 20 random numbers between 0 and 100 
scores = np.random.randint(0,100,20) 
df = pd.DataFrame(scores, columns=['scores']) 

bins = [0,50,75, np.inf] 

df['binned_scores'] = pd.cut(df.scores, bins=[0,50,75, np.inf], include_lowest=False, right=True) 
df['bin_labels'] = pd.cut(df.scores, bins=[0,50,75, np.inf], include_lowest=False, right=True, labels=['L','M','H']) 

Les arguments include_lowest et right vous permettent de contrôler si les bords de vos segments sont inclus ou non.