Sie könnten np.where verwenden . Wenn cond
es sich um ein boolesches Array handelt und A
und B
Arrays sind, dann
C = np.where(cond, A, B)
definiert C als gleich A
wo cond
ist wahr und B
wo cond
ist falsch.
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)
ergibt
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 NaN
2 8 5 0 NaN
Wenn Sie mehr als eine Bedingung haben, können Sie stattdessen np.select verwenden. Wenn Sie beispielsweise df['que']
gleich df['two']
wann möchten df['one'] < df['two']
, dann
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)
ergibt
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 70
2 8 5 0 NaN
Wenn wir davon ausgehen können, dass df['one'] >= df['two']
wenn df['one'] < df['two']
Falsch ist, könnten die Bedingungen und Auswahlmöglichkeiten vereinfacht werden
conditions = [
df['one'] < df['two'],
df['one'] <= df['three']]
choices = [df['two'], df['one']]
(Die Annahme ist möglicherweise nicht wahr, wenn sie NaNs enthält df['one']
oder df['two']
enthält.)
Beachten Sie, dass
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
Definiert einen DataFrame mit Zeichenfolgenwerten. Da sie numerisch aussehen, ist es möglicherweise besser, diese Zeichenfolgen in Floats umzuwandeln:
df2 = df.astype(float)
Dies ändert jedoch die Ergebnisse, da Zeichenfolgen zeichenweise verglichen werden, während Gleitkommazahlen numerisch verglichen werden.
In [61]: '10' <= '4.2'
Out[61]: True
In [62]: 10 <= 4.2
Out[62]: False
if
Aussage istFalse
?