我正在寻找一种通过字符串中的替代内容过滤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

关于python - Pandas :按|过滤行(OR)–不相互包含,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31051593/

10-09 15:49