Chắc chắn! Setup:
>>> import pandas as pd
>>> from random import randint
>>> df = pd.DataFrame({'A': [randint(1, 9) for x in xrange(10)],
'B': [randint(1, 9)*10 for x in xrange(10)],
'C': [randint(1, 9)*100 for x in xrange(10)]})
>>> df
A B C
0 9 40 300
1 9 70 700
2 5 70 900
3 8 80 900
4 7 50 200
5 9 30 900
6 2 80 700
7 2 80 400
8 5 80 300
9 7 70 800
Chúng ta có thể áp dụng các hoạt động cột và nhận boolean đối tượng Series:
>>> df["B"] > 50
0 False
1 True
2 True
3 True
4 False
5 False
6 True
7 True
8 True
9 True
Name: B
>>> (df["B"] > 50) & (df["C"] == 900)
0 False
1 False
2 True
3 True
4 False
5 False
6 False
7 False
8 False
9 False
[Update, để chuyển sang kiểu mới .loc
]:
Và sau đó chúng ta có thể sử dụng chúng để chỉ mục vào đối tượng. Để truy cập đọc, bạn có thể chuỗi chỉ mục:
>>> df["A"][(df["B"] > 50) & (df["C"] == 900)]
2 5
3 8
Name: A, dtype: int64
nhưng bạn có thể gặp rắc rối vì sự khác biệt giữa chế độ xem và bản sao làm việc này để ghi quyền truy cập. Bạn có thể sử dụng thay vì .loc
:
>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"]
2 5
3 8
Name: A, dtype: int64
>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"].values
array([5, 8], dtype=int64)
>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"] *= 1000
>>> df
A B C
0 9 40 300
1 9 70 700
2 5000 70 900
3 8000 80 900
4 7 50 200
5 9 30 900
6 2 80 700
7 2 80 400
8 5 80 300
9 7 70 800
Lưu ý rằng tôi vô tình đã làm == 900
và không != 900
, hoặc ~(df["C"] == 900)
, nhưng tôi quá lười biếng để sửa chữa nó. Tập thể dục cho người đọc. : ^)
Bình chọn cho tên của bạn! – 8090PZ