Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.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_Dataframe - Fatal编程技术网

Python 熊猫:为多个列选择具有条件的行

Python 熊猫:为多个列选择具有条件的行,python,pandas,dataframe,Python,Pandas,Dataframe,我使用它有条件地选择列的行: X.loc[数据['column']==1] 但是我想把这个条件扩展到几列。这些列有一个共同点:它们包含相同的字符串。所以实际上我有一个column1,一个column2column100等,此条件应适用于所有这些列。实际上是这样的(通配符): X.loc[数据['column*']==1] 这些条件应与或链接。是否有机会轻松完成此操作?将每个比较放在括号中,并将其与逻辑运算符组合: pd.DataFrame(X).loc[(data['col1']==23) &a

我使用它有条件地选择
列的行

X.loc[数据['column']==1]

但是我想把这个条件扩展到几列。这些列有一个共同点:它们包含相同的字符串。所以实际上我有一个
column1
,一个
column2
column100
等,此条件应适用于所有这些列。实际上是这样的(通配符):

X.loc[数据['column*']==1]


这些条件应与
链接。是否有机会轻松完成此操作?

将每个比较放在括号中,并将其与逻辑运算符组合:

pd.DataFrame(X).loc[(data['col1']==23) & (data['col2']==42)] # and
pd.DataFrame(X).loc[(data['col1']==23) | (data['col2']==42)] # or
测试数据帧 创建一个新的dataframe,对所有列进行测试

result_s = d.concat((df['col%i'%i] == 1 for i in range(3)), axis=1).all(axis=1)
导致

0    False
1     True
2    False
dtype: bool
如果你做了
df[结果]
你会得到

    col0 col1 col2
1   1    1    1
这将选择所有列均为
==1
的行。如果其中一行足够,请将
.all()
更改为
.any

    col0 col1 col2
0   1    1    2
1   1    1    1

对于某些数据帧
X

   p A  p B  p C
0    0    0    0
1    0    0    0
2    0    0    1
3    0    0    0
4    0    0    0
5    0    0    0
6    1    0    0
如果可以在
列列表中设置要测试的列的名称

col_list = X.columns
然后,您可以使用
np.any()
对以下各项进行测试:

X.loc[(X[col_list] == 1).any(axis=1)]
这给了你:

   p A  p B  p C
2    0    0    1
6    1    0    0
通知您不需要
loc
,并且仍然会得到相同的答案,请将此信息归功于@MaartynFabre

X[(X[col_list] == 1).any(axis=1)]

   p A  p B  p C
2    0    0    1
6    1    0    0

以下是另一种考虑方法:

df
   col0  col1  col2
0     1     1     2
1     1     1     1
2     2     2     2

df.loc[df['col0'] == 1, [x for x in df.columns if x == 'col0']]
   col0
0     1
1     1

您可以使用列表理解来查找您要查找的列。

谢谢:)但我无法对数百列执行此操作。请查看
numpy.any()
我问的两个问题与您的问题非常类似:对于您要测试的列列表,请尝试
X.loc[(X[col\u list]==1)。any(axis=1)]
@chuckm
.loc
不正确needed@MaartenFabré感谢您提供的信息,更新并记入:)看起来不错:)但这通常不起作用,例如,如果这些列命名为
columnOne
columnTwo
等。如果您有列列表,
df[(df[选定的_列]==1)。任意(axis=1)]
也可以起作用,而且更有效efficient@scientiaetveritas
df['col%i'%i]==1表示范围(3)中的i
只是一种选择列的方法,具体取决于列的外观,这可能需要修改。你需要在你的问题中提供更多的信息来说明这一点
df
   col0  col1  col2
0     1     1     2
1     1     1     1
2     2     2     2

df.loc[df['col0'] == 1, [x for x in df.columns if x == 'col0']]
   col0
0     1
1     1