Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

กรอง Pandas DataFrame ด้วย NumPy where()

แนวคิด

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 ตัวเลข เพื่อนำไปใช้ต่อ