trích xuất giá trị cột dựa trên khung dữ liệu gấu trúc cột khác


109

Tôi đang gặp khó khăn khi trích xuất giá trị của một điều kiện biến trên một biến khác. Ví dụ: khung dữ liệu sau:

A  B
p1 1
p1 2
p3 3
p2 4

Làm thế nào tôi có thể nhận được giá trị của Akhi B=3nào? Mỗi khi tôi trích xuất giá trị của A, tôi nhận được một đối tượng, không phải một chuỗi.


Tôi hiểu, tôi nên thêm item()vào cuối.
Anderson Zhu

df.querypd.evalcó vẻ như phù hợp với trường hợp sử dụng này. Để biết thông tin về nhóm pd.eval()hàm, tính năng và trường hợp sử dụng của chúng, vui lòng truy cập Đánh giá biểu thức động ở gấu trúc bằng pd.eval () .
cs95

Câu trả lời:


193

Bạn có thể sử dụng locđể nhận được chuỗi đáp ứng điều kiện của bạn và sau đó ilocđể nhận phần tử đầu tiên:

In [2]: df
Out[2]:
    A  B
0  p1  1
1  p1  2
2  p3  3
3  p2  4

In [3]: df.loc[df['B'] == 3, 'A']
Out[3]:
2    p3
Name: A, dtype: object

In [4]: df.loc[df['B'] == 3, 'A'].iloc[0]
Out[4]: 'p3'

24
Cảm ơn bạn đã giúp đỡ. df.loc[df['B'] == 3, 'A'].item()hoạt động cho tôi quá.
Anderson Zhu

3
nó chọn cái nào nếu khung dữ liệu có nhiều mục nhập '3' trong cột B?
subhash

1
df.loc [df ["Condition_Column"] == 0, ("Column_1", "Column_2," Column_3 "," Column_4 ")] phù hợp với tôi. Ví dụ này để chọn nhiều cột. Chúng phải nằm trong bộ ba.
Mustafa Uçar

nếu df.loc [df ['B'] == 300, 'A']. iloc [0] có nghĩa là đầu ra sẽ là gì?
user1999109 Ngày

.item () dường như đã không được dùng nữa và sẽ bị xóa. Có một cách khác để làm điều này? Tôi không quan tâm đến tên của cột hoặc kiểu dữ liệu cũng được trả về với phương thức .loc để truy vấn.
Dan

39

Bạn có thể thử query, cách này ít gõ hơn:

df.query('B==3')['A']

Query là nguyên nhân thú vị chúng ta có thể thêm mệnh đề phức tạp hơn để nó là tốt
Samir Baid

1
IMHO, đây là câu trả lời tốt nhất.
NLR

27

df[df['B']==3]['A'], giả sử df là gấu trúc của bạn.DataFrame.


Bạn có thể vui lòng cung cấp liên kết nơi chính xác phương pháp này được mô tả trong tài liệu chính thức của gấu trúc không?
vasili111

Ý tôi là ][một phần.
vasili111

11

Sử dụng df[df['B']==3]['A'].valuesnếu bạn chỉ muốn mục đó không có dấu ngoặc


Bạn có thể vui lòng cung cấp liên kết nơi chính xác phương pháp này được mô tả trong tài liệu chính thức của gấu trúc không? Ý tôi là ][một phần.
vasili111

Nó trả về kết quả với []
Sid

Bạn vẫn cần đặt [0]ở cuối để truy cập giá trị.
rubebop

0
male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()

Tôi cũng đã làm việc với các hoạt động khai thác và mệnh đề này cho nhiệm vụ của mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.