选择索引标签位于两个列表之一的Pandas Dataframe行

时间:2018-11-06 17:25:18

标签: python pandas

我有一个带有索引标签的数据框

     one   two three

A    ...   ...   ... 
B    ...   ...   ... 
C    ...   ...   ... 
D    ...   ...   ... 
E    ...   ...   ... 
F    ...   ...   ... 

我想根据行索引标签是在一个列表中还是另一个列表中,对数据帧进行子集化。列表是互斥的,不会包含相同的元素。

我可以用一个列表来执行此操作,但似乎不能两个。

所以如果我有list_A = ['A, B, F']list_B = ['D']

所以df[df.index.isin(list_A)]产生:

     one   two three

A    ...   ...   ... 
B    ...   ...   ... 
F    ...   ...   ... 

我想要的是df[df.index.isin(['A','B','D','F'])],无需合并列表:

     one   two three

A    ...   ...   ... 
B    ...   ...   ... 
D    ...   ...   ... 
F    ...   ...   ... 

但是当我尝试使用'df[df.index.isin(list_A or List_B)]或和df[df.index.isin(list_A) or df.index.isin(list_B)]时,它将无法正常工作。

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

您有两种选择。

|(按位“或”)用于两个系列

df.index.isin(lst)给出了布尔序列,因此请通过or使用矢量化的|操作:

df_filtered = df[df.index.isin(list_A) | df.index.isin(list_B)]

使用pd.Index.isin之前合并列表

可能更有效地,通过考虑两个输入列表的单个布尔序列进行索引:

df_filtered = df[df.index.isin(list_A + list_B)]