基于Python索引补码的元素提取

基于Python索引补码的元素提取,python,numpy,pandas,Python,Numpy,Pandas,我有一个数据帧,从中我选择了两个子集df,df_a和df_b。例如,在iris数据集中: df_a = iris[iris.Name == "Iris-setosa"] df_b = iris[iris.Name == "Iris-virginica"] 获取既不在dfu a中也不在df_b中的iris的所有元素的最佳方法是什么?我不想提及定义了df_a和df_b的原始条件。我只是假设df_a和df_b是iris的子集,所以我想根据df_a和df_b的索引从iris中提取元素。基本上,假设:

我有一个数据帧,从中我选择了两个子集df,
df_a
df_b
。例如,在
iris
数据集中:

df_a = iris[iris.Name == "Iris-setosa"]
df_b = iris[iris.Name == "Iris-virginica"]
获取既不在
dfu 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
# ...
编辑:这里有一个看似低效且不雅观的解决方案,我相信熊猫有更好的方法:

# 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]

如何在熊猫身上最有效/优雅地完成这项工作?谢谢。

这似乎比您的第二个解决方案快一点。使用
.ix
索引时,开销会稍微大一些:

df[~df.index.isin(df_a.index+df_b.index)]

看看这个问题,它可能会给你一些好的答案