按不在列表中的标签切片Pandas数据帧

lma*_*999 35 python pandas

我有一个pandas数据帧,df.

我想选择在所有指数df不是在列表中,blacklist.

现在,我使用list comprehension创建所需的标签以进行切片.

ix=[i for i in df.index if i not in blacklist]  
df_select=df.loc[ix]
Run Code Online (Sandbox Code Playgroud)

工作正常,但如果我需要经常这样做可能会很笨拙.

有一个更好的方法吗?

EdC*_*ica 55

isin在索引上使用并反转布尔索引以执行标签选择:

In [239]:

df = pd.DataFrame({'a':np.random.randn(5)})
df
Out[239]:
          a
0 -0.548275
1 -0.411741
2 -1.187369
3  1.028967
4 -2.755030
In [240]:

t = [2,4]
df.loc[~df.index.isin(t)]
Out[240]:
          a
0 -0.548275
1 -0.411741
3  1.028967
Run Code Online (Sandbox Code Playgroud)


ASG*_*SGM 12

您可以使用set()创建原始索引与要删除的索引之间的差异:

df.loc[set(df.index) - set(blacklist)]
Run Code Online (Sandbox Code Playgroud)

它具有简约的优点,并且比列表理解更容易阅读.


小智 6

df = pd.DataFrame(data=[5,6,7,8], index=[1,2,3,4], columns=['D',])
blacklist = [2,3]

df.drop(blacklist,0)
Run Code Online (Sandbox Code Playgroud)

  • 仅代码答案并不是特别有帮助。请简要描述此代码如何解决问题。 (7认同)