คุณสามารถใช้np.where ถ้าcond
เป็นอาร์เรย์บูลีนและA
และB
เป็นอาร์เรย์ดังนั้น
C = np.where(cond, A, B)
กำหนดให้ C เท่ากับA
ที่cond
เป็นจริงและเท็จอยู่B
ที่ไหนcond
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']
เป็นเท็จเงื่อนไขและทางเลือกต่างๆก็สามารถทำให้ง่ายขึ้นได้
conditions = [
df['one'] < df['two'],
df['one'] <= df['three']]
choices = [df['two'], df['one']]
(สมมติฐานอาจไม่เป็นจริงหากมีdf['one']
หรือdf['two']
มี NaN)
โปรดทราบว่า
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
ไหร่ถ้าคำสั่งคืออะไร?