在Python Pandas中基于索引补集选择元素
我有一个数据框(dataframe),从中我挑选了两个子数据框,分别叫做 df_a
和 df_b
。比如在 iris
数据集中:
df_a = iris[iris.Name == "Iris-setosa"]
df_b = iris[iris.Name == "Iris-virginica"]
我想知道怎么才能找到所有不在 df_a
和 df_b
中的 iris
数据。其实我不想再提到当初是怎么定义 df_a
和 df_b
的。我只是假设 df_a
和 df_b
是 iris
的一部分,所以我想根据 df_a
和 df_b
的索引来从 iris
中提取元素。基本上,可以假设:
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
# ...
编辑:这里有一个看起来效率不高且不太优雅的解决方案,我相信 pandas 有更好的方法:
# 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)]
还有第二种方法:
df_rest = iris.ix[iris.index - df_a.index - df_b.index]
那么在 pandas 中,怎么才能做到最有效率和最优雅呢?谢谢。
1 个回答
20
这个方法看起来比你的第二个方案快一点。使用.ix
进行索引时,会有一些额外的开销:
df[~df.index.isin(df_a.index+df_b.index)]