2013-02-20 29 views
6

Tôi có một khung dữ liệu mà tôi chọn hai tập hợp con dfs, df_adf_b. Ví dụ trong iris bộ dữ liệu:chọn ra các yếu tố dựa trên việc bổ sung các chỉ số trong các chú gấu trúc Python

df_a = iris[iris.Name == "Iris-setosa"] 
df_b = iris[iris.Name == "Iris-virginica"] 

cách tốt nhất để có được tất cả các yếu tố của iris nhưng không phải là trong df_a cũng không phải trong df_b là gì? Tôi không muốn tham khảo các điều kiện ban đầu đã xác định df_adf_b. Tôi chỉ giả định rằng df_adf_b là các tập hợp con của iris, vì vậy, tôi muốn lấy các phần tử ra khỏi iris dựa trên các chỉ số của df_adf_b. Về cơ bản, giả sử rằng:

df_a = get_a_subset(iris) 
df_b = get_b_subset(iris) 
# retrieve the subset of iris that 
# has all elements not in df_a or in df_b 
# ... 

EDIT: đây là một giải pháp mà dường như không hiệu quả và không thanh nha và tôi chắc chắn rằng gấu trúc có một cách tốt hơn:

# get subset of iris that is not in a nor in b 
df_rest = iris[map(lambda x: (x not in df_a.index) & (x not in df_b.index), iris.index)] 

Và một giây một:

df_rest = iris.ix[iris.index - df_a.index - df_b.index] 

Làm thế nào điều này có thể được thực hiện hiệu quả nhất/thanh lịch trong gấu trúc? cảm ơn.

Trả lời

10

Điều này có vẻ nhanh hơn một chút so với giải pháp thứ hai của bạn. Có thêm một chút chi phí khi lập chỉ mục với .ix:

df[~df.index.isin(df_a.index+df_b.index)] 
Các vấn đề liên quan