Je cherche un moyen plus efficace de limiter les valeurs d'une série de pandas.

Dans l'exemple ci-dessous, chaque valeur inférieure à 5 doit être remplacée par 5, chaque valeur supérieure doit être remplacée par 25

import pandas as pd
df = pd.DataFrame({'value': list(range(30))})
df['value'].apply(lambda x: 5 if x < 5 else 25 if x > 25 else x)

Y a-t-il un pandas ou un numpy intégré qui fait de même?

1
576i 19 nov. 2018 à 15:26

3 réponses

Meilleure réponse

Utilisez numpy.select ou Series.clip:

m1 = df['value'] < 5
m2 = df['value'] > 25

df['Status'] = np.select([m1, m2], [5,25], df['value'])

Ou:

df['Status'] = df['value'].clip(5, 25)
2
jezrael 19 nov. 2018 à 12:29

Avec np.clip -

np.clip(df.value.values,a_min=5,a_max=25) # use df.value for series output
2
Divakar 19 nov. 2018 à 12:31

J'ai trouvé le intégré.

Il y a un clip, clip_lower et clip_upper dans les pandas

import pandas as pd
df = pd.DataFrame({'value': list(range(30))})
df['value'].clip(lower=5, upper=25)
1
576i 19 nov. 2018 à 12:31