Vous pouvez utiliser np.where . Si cond
est un tableau booléen, et A
et B
sont des tableaux, alors
C = np.where(cond, A, B)
définit C comme étant égal à A
où cond
est True et B
où cond
est False.
import numpy as np
import pandas as pd
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
df['que'] = np.where((df['one'] >= df['two']) & (df['one'] <= df['three'])
, df['one'], np.nan)
rendements
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 NaN
2 8 5 0 NaN
Si vous avez plus d'une condition, vous pouvez utiliser np.select à la place. Par exemple, si vous souhaitez df['que']
égaler df['two']
quand df['one'] < df['two']
, alors
conditions = [
(df['one'] >= df['two']) & (df['one'] <= df['three']),
df['one'] < df['two']]
choices = [df['one'], df['two']]
df['que'] = np.select(conditions, choices, default=np.nan)
rendements
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 70
2 8 5 0 NaN
Si nous pouvons supposer que df['one'] >= df['two']
when df['one'] < df['two']
est False, alors les conditions et les choix pourraient être simplifiés à
conditions = [
df['one'] < df['two'],
df['one'] <= df['three']]
choices = [df['two'], df['one']]
(L'hypothèse peut ne pas être vraie si df['one']
ou df['two']
contiennent des NaN.)
Notez que
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
définit un DataFrame avec des valeurs de chaîne. Puisqu'elles ont l'air numériques, vous feriez peut-être mieux de convertir ces chaînes en flottants:
df2 = df.astype(float)
Cela modifie les résultats, cependant, car les chaînes se comparent caractère par caractère, tandis que les flottants sont comparés numériquement.
In [61]: '10' <= '4.2'
Out[61]: True
In [62]: 10 <= 4.2
Out[62]: False
if
déclaration estFalse
?