Python Pandas:如何过滤存储在不同变量中的多个表达式的数据帧?

I w*_*ges 2 python variables expression filter pandas

我正在构建一个多用途的用户界面,我正在为它添加Pandas.为此,我需要按用户选择定义的组件(存储在变量中)形成表达式.

一切似乎都很好,但我陷入了死胡同.我希望用户能够选择几个表达式,然后将它们连接起来以形成新的数据帧.如果我只使用一个表达式,一切都会起作用:

from pandas import read_csv
df = read_csv("SomeCsv.csv")
b= df[r'ID']
a=(b==r'p')
Value=df[a] #Works,returning the rows in df whichs column 'ID' equals r'p'
Run Code Online (Sandbox Code Playgroud)

但是如果我想要包含更多表达式:

from pandas import read_csv
df = read_csv("SomeCsv.csv")
b= df[r'ID']
c=(b==r'p')
d=(b==r'ul')
a=c or d  #Breaks at this line
Value=df[a] #Doesnt work. I would expect the rows in df whichs column 'ID' equals r'p' or 'ID' equals r'ul'
Run Code Online (Sandbox Code Playgroud)

并抛出以下错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)

在询问之前,我尝试了所有可以想到的表达式的.any和.all组合,并且所有这些组合都失败了.

如何通过匹配存储在变量中的多个表达式的列来过滤此数据帧?

Rom*_*kar 6

实际上你可以使用@miku答案,但在你的情况下你也可以使用pandas.Series.isin()方法:

>>> df[df['ID'].isin(('p', 'ul'))]
Run Code Online (Sandbox Code Playgroud)


mik*_*iku 5

作为numpy的新手,我也有点挣扎(没有双关语).我相信你想要这样的东西:

>>> df[(df['ID'] == 'p') | (df['ID'] == 'ul')]
Run Code Online (Sandbox Code Playgroud)

表达式必须求值为布尔值(并且这些术语必须通过按位运算连接 ),然后用于屏蔽或过滤相应的元素.


也可以看看: