Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python - Lọc DataFrame Pandas với NumPy where()

Phương thức numpy.where() có thể dùng để lọc DataFrame Pandas. Đặt điều kiện trong where(). Trước tiên import thư viện:

import pandas as pd
import numpy as np

Tạo DataFrame sản phẩm

dataFrame = pd.DataFrame({
    "Product": ["SmartTV", "ChromeCast", "Speaker", "Earphone"],
    "Opening_Stock": [300, 700, 1200, 1500],
    "Closing_Stock": [200, 500, 1000, 900]
})

Lọc với 2 điều kiện

resValues1 = np.where((dataFrame['Opening_Stock'] >= 700) & (dataFrame['Closing_Stock'] < 1000))
print("\nDataFrame lọc 2 điều kiện:\n", dataFrame.loc[resValues1])

Lọc với 3 điều kiện

resValues2 = np.where((dataFrame['Opening_Stock'] >= 500) & 
                      (dataFrame['Closing_Stock'] < 1000) & 
                      (dataFrame['Product'].str.startswith('C')))
print("\nDataFrame lọc 3 điều kiện:\n", dataFrame.loc[resValues2])

Ví dụ hoàn chỉnh

import pandas as pd
import numpy as np

dataFrame = pd.DataFrame({
    "Product": ["SmartTV", "ChromeCast", "Speaker", "Earphone"],
    "Opening_Stock": [300, 700, 1200, 1500],
    "Closing_Stock": [200, 500, 1000, 900]
})

print("DataFrame...\n", dataFrame)

# 2 điều kiện
resValues1 = np.where((dataFrame['Opening_Stock'] >= 700) & (dataFrame['Closing_Stock'] < 1000))
print("\nLọc 2 điều kiện:\n", dataFrame.loc[resValues1])

# 3 điều kiện
resValues2 = np.where((dataFrame['Opening_Stock'] >= 500) & 
                      (dataFrame['Closing_Stock'] < 1000) & 
                      (dataFrame['Product'].str.startswith('C')))
print("\nLọc 3 điều kiện:\n", dataFrame.loc[resValues2])

Kết quả đầu ra

DataFrame...
  Closing_Stock  Opening_Stock    Product
0           200            300    SmartTV
1           500            700  ChromeCast
2          1000           1200    Speaker
3           900           1500   Earphone

Lọc 2 điều kiện:
  Closing_Stock  Opening_Stock    Product
1           500            700  ChromeCast
3           900           1500   Earphone

Lọc 3 điều kiện:
  Closing_Stock  Opening_Stock    Product
1           500            700  ChromeCast

Lưu ý: np.where trả về tuple mảng chỉ số. Dùng df.loc[resValues1] để lấy hàng. Cách tự nhiên hơn trong Pandas: df[(df['Opening_Stock']>=700) & (df['Closing_Stock']<1000)].