2015-06-18 21 views
6

Tôi đang học gấu trúc và bị kẹt với vấn đề này tại đây.Gắn cột Boolean vào khung dữ liệu Panda

Tôi đã tạo một khung dữ liệu theo dõi tất cả người dùng và số lần họ đã làm điều gì đó.

Để hiểu rõ hơn về vấn đề tôi đã tạo ví dụ này:

import pandas as pd 
data = [ 
    {'username': 'me', 'bought_apples': 2, 'bought_pears': 0}, 
    {'username': 'you', 'bought_apples': 1, 'bought_pears': 1} 
] 
df = pd.DataFrame(data) 
df['bought_something'] = df['bought_apples'] > 0 or df['bought_pears'] > 0 

Trong dòng cuối cùng tôi muốn thêm một cột cho biết nếu họ dùng đã mua một cái gì đó ở tất cả.

Lỗi này bật lên:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Tôi hiểu quan điểm mơ hồ trong dòng gấu trúc của (also explained here) nhưng tôi không thể liên hệ nó với vấn đề.

Điều thú vị là các công trình này

df['bought_something'] = df['bought_apples'] > 0 

bất cứ ai có thể giúp tôi?

Trả lời

11

Bạn có thể gọi sum hàng khôn ngoan và so sánh nếu điều này là lớn hơn 0:

In [105]: 
df['bought_something'] = df[['bought_apples','bought_pears']].sum(axis=1) > 0 
df 

Out[105]: 
    bought_apples bought_pears username bought_something 
0    2    0  me    True 
1    1    1  you    True 

Về nỗ lực ban đầu của bạn, thông báo lỗi được nói với bạn rằng đó là mơ hồ để so sánh một vô hướng với một mảng, nếu bạn muốn or điều kiện boolean thì bạn cần phải sử dụng toán tử | chút khôn ngoan và quấn các điều kiện trong ngoặc do khai thác được ưu tiên:

In [111]: 
df['bought_something'] = ((df['bought_apples'] > 0) | (df['bought_pears'] > 0)) 
df 

Out[111]: 
    bought_apples bought_pears username bought_something 
0    2    0  me    True 
1    1    1  you    True 
2

T ông lý do cho rằng lỗi là bạn sử dụng 'hoặc' để 'tham gia' hai vectơ boolean thay vì vô hướng boolean. Đó là lý do tại sao nó nói nó là mơ hồ.

Các vấn đề liên quan