Ви можете використовувати np.where . Якщо condє булевим масивом, а Aі Bє масивами, то
C = np.where(cond, A, B)
визначає C як рівне тому, Aде condTrue, а Bде condFalse.
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)
врожайність
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 NaN
2 8 5 0 NaN
Якщо у вас більше однієї умови, ви можете замість цього використовувати np.select . Наприклад, якщо ви хочете df['que']дорівнювати df['two']коли df['one'] < df['two'], тоді
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)
врожайність
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 70
2 8 5 0 NaN
Якщо ми можемо припустити, що df['one'] >= df['two']коли df['one'] < df['two']False, тоді умови та вибір можна спростити
conditions = [
df['one'] < df['two'],
df['one'] <= df['three']]
choices = [df['two'], df['one']]
(Припущення може не відповідати дійсності, якщо містить NaN df['one']або df['two']містить його.)
Зауважте, що
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
визначає DataFrame із рядковими значеннями. Оскільки вони виглядають числовими, можливо, вам краще перетворити ці рядки на плаваючі:
df2 = df.astype(float)
Однак це змінює результати, оскільки рядки порівнюють символ за символом, тоді як плаваючі порівнюються числово.
In [61]: '10' <= '4.2'
Out[61]: True
In [62]: 10 <= 4.2
Out[62]: False
ifтвердженняFalse?