Anda bisa menggunakan np.where . If cond
adalah array boolean, dan A
dan B
adalah array, maka
C = np.where(cond, A, B)
mendefinisikan C sama dengan A
where cond
adalah True, dan B
where cond
is 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)
hasil
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 NaN
2 8 5 0 NaN
Jika Anda memiliki lebih dari satu kondisi, maka Anda dapat menggunakan np.select . Misalnya, jika Anda ingin df['que']
menyamakan df['two']
kapan df['one'] < df['two']
, maka
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)
hasil
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 70
2 8 5 0 NaN
Jika kita dapat mengasumsikan bahwa df['one'] >= df['two']
when df['one'] < df['two']
is False, maka kondisi dan pilihan dapat disederhanakan menjadi
conditions = [
df['one'] < df['two'],
df['one'] <= df['three']]
choices = [df['two'], df['one']]
(Asumsi tersebut mungkin tidak benar jika df['one']
atau df['two']
mengandung NaN.)
Catat itu
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
mendefinisikan DataFrame dengan nilai string. Karena terlihat numerik, Anda mungkin lebih baik mengubah string tersebut menjadi float:
df2 = df.astype(float)
Ini mengubah hasil, karena string membandingkan karakter demi karakter, sementara float dibandingkan secara numerik.
In [61]: '10' <= '4.2'
Out[61]: True
In [62]: 10 <= 4.2
Out[62]: False
if
pernyataan ituFalse
?