แนวคิด
numpy.where(condition) คืน index (tuple of arrays) ที่เงื่อนไขเป็น True นำไปใช้กับ df.loc[] เพื่อกรองแถว ได้ประสิทธิภาพดีสำหรับเงื่อนไขซับซ้อนหลายข้อ
ตัวอย่างโค้ด
import pandas as pd
import numpy as np
df = pd.DataFrame({
"Product": ["SmartTV", "ChromeCast", "Speaker", "Earphone"],
"Opening_Stock": [300, 700, 1200, 1500],
"Closing_Stock": [200, 500, 1000, 900]
})
print("DataFrame:\n", df)
# เงื่อนไข 2 ข้อ: Opening_Stock >= 700 AND Closing_Stock < 1000
res1 = np.where((df['Opening_Stock'] >= 700) & (df['Closing_Stock'] < 1000))
print("\nเงื่อนไข 2 ข้อ:\n", df.loc[res1])
# เงื่อนไข 3 ข้อ: + Product เริ่มต้นด้วย 'C'
res2 = np.where(
(df['Opening_Stock'] >= 500) &
(df['Closing_Stock'] < 1000) &
(df['Product'].str.startswith('C'))
)
print("\nเงื่อนไข 3 ข้อ:\n", df.loc[res2])
ผลลัพธ์
DataFrame:
Closing_Stock Opening_Stock Product
0 200 300 SmartTV
1 500 700 ChromeCast
2 1000 1200 Speaker
3 900 1500 Earphone
เงื่อนไข 2 ข้อ:
Closing_Stock Opening_Stock Product
1 500 700 ChromeCast
3 900 1500 Earphone
เงื่อนไข 3 ข้อ:
Closing_Stock Opening_Stock Product
1 500 700 ChromeCast
เปรียบเทียบวิธีอื่น
# Boolean indexing แบบตรงไปตรงมา (แนะนำสำหรับกรณีง่าย)
df[(df['Opening_Stock'] >= 700) & (df['Closing_Stock'] < 1000)]
# df.query() สำหรับ query string
df.query('Opening_Stock >= 700 and Closing_Stock < 1000')
# np.where ใช้ได้ดีเมื่อต้องการ index positions ตัวเลข เพื่อนำไปใช้ต่อ