Bạn có thể sử dụng np.where . Nếu cond
là một mảng boolean và A
và B
là các mảng, thì
C = np.where(cond, A, B)
định nghĩa C bằng với A
đâu cond
là Đúng và B
đâu cond
là Sai.
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)
hoa lợi
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 NaN
2 8 5 0 NaN
Nếu bạn có nhiều hơn một điều kiện, thì bạn có thể sử dụng np.select để thay thế. Ví dụ: nếu bạn muốn df['que']
bằng df['two']
khi nào df['one'] < df['two']
, thì
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)
hoa lợi
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 70
2 8 5 0 NaN
Nếu chúng ta có thể giả định rằng df['one'] >= df['two']
khi nào df['one'] < df['two']
là Sai, thì các điều kiện và lựa chọn có thể được đơn giản hóa thành
conditions = [
df['one'] < df['two'],
df['one'] <= df['three']]
choices = [df['two'], df['one']]
(Giả định có thể không đúng nếu df['one']
hoặc df['two']
chứa NaN.)
Lưu ý rằng
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
định nghĩa một DataFrame với các giá trị chuỗi. Vì chúng trông bằng số, bạn có thể tốt hơn nên chuyển đổi các chuỗi đó thành float:
df2 = df.astype(float)
Tuy nhiên, điều này làm thay đổi kết quả, vì các chuỗi so sánh từng ký tự, trong khi số thực được so sánh bằng số.
In [61]: '10' <= '4.2'
Out[61]: True
In [62]: 10 <= 4.2
Out[62]: False
if
câu lệnh làFalse
?