Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表中具有可变/动态值数的布尔索引的优雅方法_Python_Pandas_Boolean Operations - Fatal编程技术网

Python 列表中具有可变/动态值数的布尔索引的优雅方法

Python 列表中具有可变/动态值数的布尔索引的优雅方法,python,pandas,boolean-operations,Python,Pandas,Boolean Operations,很抱歉,我想不出一个能简洁准确地描述这个问题的标题 假设您有数据帧,例如: Time Temp RH Sensor Unit 0 2015-12-07 00:06:00 14.912000 42.324 A 1 1 2015-12-07 00:12:00 14.768000 42.371 A 2 2 2015-

很抱歉,我想不出一个能简洁准确地描述这个问题的标题

假设您有数据帧,例如:

                 Time           Temp      RH     Sensor  Unit  
0        2015-12-07 00:06:00  14.912000  42.324      A     1      
1        2015-12-07 00:12:00  14.768000  42.371      A     2      
2        2015-12-07 00:18:00  14.601000  42.415      A     1
3        2015-12-07 00:24:00  14.457000  42.462      A     4
...
您希望通过
单元
列对这些数据进行子集划分。如果您有要用于创建子集的
单元
,可以执行以下操作:

 subset = df[df['Unit'] == 4]
subset = df[(df['Unit'] == 4) | (df['Unit'] == 1)]
…如果要使用多个
单位
值进行子集,可以执行以下操作:

 subset = df[df['Unit'] == 4]
subset = df[(df['Unit'] == 4) | (df['Unit'] == 1)]
我遇到的问题是,我使用for循环来执行这些操作,并且包含的
单元的数量发生了变化(值列表的长度从1到3不等)。换句话说,想象一下
Unit
是我正在循环的列表列表:

for i in Unit:
    subset = df[(df['Unit'] == i]
    ...
当然,当
i
是一个单值时,上面的方法会起作用,但当它是多个值的列表时,就不起作用了。有没有一种方法可以在不使用
if
语句的情况下执行此操作?

设置

df
Out[2350]: 
                  Time    Temp      RH Sensor  Unit
0  2015-12-07 00:06:00  14.912  42.324      A     1
1  2015-12-07 00:12:00  14.768  42.371      A     2
2  2015-12-07 00:18:00  14.601  42.415      A     1
3  2015-12-07 00:24:00  14.457  42.462      A     4
解决方案

#use np.in1d to match multiple Unit values.
df[np.in1d(df.Unit,[1,2])]
Out[2351]: 
                  Time    Temp      RH Sensor  Unit
0  2015-12-07 00:06:00  14.912  42.324      A     1
1  2015-12-07 00:12:00  14.768  42.371      A     2
2  2015-12-07 00:18:00  14.601  42.415      A     1
然后,您可以构建单位价值列表并使用:

df[np.in1d(df.Unit,your_unit_value_list)]

如果我理解正确的话,您试图对条件列表使用布尔索引?例如,请参见下面的数据帧:

df
       a
0     12
1  65346
2   1243
3     63
4    568
5    243
您希望在以下条件列表中建立索引:

conditions = [12, 568]
您可以使用串联方法
isin()

还有一个选择:

In [15]: x
Out[15]:
                  Time    Temp      RH Sensor  Unit
0  2015-12-07 00:06:00  14.912  42.324      A     1
1  2015-12-07 00:12:00  14.768  42.371      A     2
2  2015-12-07 00:18:00  14.601  42.415      A     1
3  2015-12-07 00:24:00  14.457  42.462      A     4

In [16]: units = [1,2]

In [17]: x.query("Unit in @units")
Out[17]:
                  Time    Temp      RH Sensor  Unit
0  2015-12-07 00:06:00  14.912  42.324      A     1
1  2015-12-07 00:12:00  14.768  42.371      A     2
2  2015-12-07 00:18:00  14.601  42.415      A     1

谢谢安德鲁!这正是我需要的。谢谢你的帮助,戴兹!谢谢你,艾伦!这是一个很好的解决方案,但我认为Andrew L和DYZ的解决方案更优雅一些。@user2970409,我想这是最快的解决方案