Pandas:按|(OR)筛选行–不相互包含



我正在寻找一种通过字符串中的替代项筛选pandas行的方法。我有很多不同的术语想搜索,所以把它们放在几个变量中会更容易,而不是每次需要访问时都列出它们。

我现在做:

df = df[df["A"].str.contains("BULL|BEAR|LONG|SHORT", case=False)]

相反,做一些类似的事情:

bull = "BULL|LONG"
bear = "BEAR|SHORT"
leverage = bull + bear
df = df[df["A"].find(leverage, case=False)]

问题是,这种方法只从每个变量中筛选出一个替代项。它将找到"BULL"但不找到"LONG",并且它将找到"SHORT"但不找到"BEAR"。它选择的似乎是任意的。根据这些术语是否出现在我正在阅读的文件中以及出现在哪里,结果可能会有所不同。

我假设这是由于|作为OR的功能是互斥的。

如果是,是否有一个相互包容的选择?我想继续使用字符串来完成此操作。原因是我在另一个依赖于相同变量的地方使用str.contains

df.loc[df["A"].str.contains(bull, case=False), "B"]
df.loc[df["A"].str.contains(bear, case=False), "B"]

您需要添加一个额外的'|'才能加入您的条款:

In [227]:
df = pd.DataFrame({'A':['bull', 'bear', 'short', 'null', 'LONG']})
df
Out[227]:
       A
0   bull
1   bear
2  short
3   null
4   LONG
In [228]:    
bull = "BULL|LONG"
bear = "BEAR|SHORT"
leverage = bull + '|' + bear
df = df[df["A"].str.contains(leverage, case=False)]
df
Out[228]:
       A
0   bull
1   bear
2  short
4   LONG

最新更新