我有一个带有索引标签的数据框
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)]
时,它将无法正常工作。
我在做什么错了?
答案 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)]