在Python Pandas中基于索引补集选择元素

13 投票
1 回答
15947 浏览
提问于 2025-04-17 16:31

我有一个数据框(dataframe),从中我挑选了两个子数据框,分别叫做 df_adf_b。比如在 iris 数据集中:

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

我想知道怎么才能找到所有不在 df_adf_b 中的 iris 数据。其实我不想再提到当初是怎么定义 df_adf_b 的。我只是假设 df_adf_biris 的一部分,所以我想根据 df_adf_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)]

撰写回答