Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.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 pandas中元素和行条件之间的逻辑AND(bolean和矩阵与列之间)_Python_Pandas - Fatal编程技术网

Python pandas中元素和行条件之间的逻辑AND(bolean和矩阵与列之间)

Python pandas中元素和行条件之间的逻辑AND(bolean和矩阵与列之间),python,pandas,Python,Pandas,编辑: 如何在熊猫身上组合不同大小的逻辑面具? 例如,查找满足elementwise条件的所有元素,同时它们所在的行也满足另一个条件 df = pandas.DataFrame({'name':'x y T Bob Banana'.split(),'value':[-100, 0, -1, 100, -33],'value_too':[1,2,2,2,-11]}) name value value_too x -100 1 y 0 2

编辑: 如何在熊猫身上组合不同大小的逻辑面具? 例如,查找满足elementwise条件的所有元素,同时它们所在的行也满足另一个条件

df = pandas.DataFrame({'name':'x y T Bob Banana'.split(),'value':[-100, 0, -1, 100, -33],'value_too':[1,2,2,2,-11]})
name value  value_too
x     -100          1
y        0          2
T       -1          2
Bob    -33          2
Banana   0        -11
想象一下,如果在上面的表格中,我需要用
T
Bob
Banana
更改行中的负值。 勾选名称可得到一系列尺寸为5的:

c1 = df.name.isin({'Banana','Bob','T'})
如果检查值是否为负数,则数据帧为5乘3:

c2 = df.applymap(lambda x: x < 0 if isinstance(x,(int,float)) else False)
数据类型是不相关的,在实际问题中,所有条目都是字符串,但数字使示例更简单


原文如下

假设我有一个数据帧:

 df = pandas.DataFrame({'a':[1,1,3],'b':[1,3,5]})
   a  b
0  1  1
1  1  3
2  3  5
我可以按值获取布尔掩码,以查找具有特定值的元素:

q = df >1
   a  b
0  0  0
1  1  1
2  1  1
我可以得到一个布尔向量来查找列满足条件的行:

q.b == 3
0
1
0
找到满足这些条件组合的元素的惯用方法是什么

??????     
   a  b
0  0  0
1  0  1
2  0  0    
edit: actually the expected output was
   a  b
0  0  0
1  1  1
2  0  0
(value greater than 1 and in a row that has b == 3)
尝试通过
assign()
方法:

out=df.gt(1).astype(int).assign(b=df['b'].eq(3).astype(int))
输出的输出

    a   b
0   0   0
1   0   1
2   1   0
    a   b
0   0   0
1   0   1
2   0   0

通过
where()
方法

out=df.gt(1).astype(int).where(df['b']==3,0)
输出的输出

    a   b
0   0   0
1   0   1
2   1   0
    a   b
0   0   0
1   0   1
2   0   0
注意:根据您的需要选择上述任何一种方法

如果需要使用
True/False
格式,则使用:

d={0:False,1:True}
out=out.replace(d.keys(),d.values(),regex=True)

您的第一个
gt
条件似乎没有必要

df[['b']].eq(3).reindex(df.columns,axis=1,fill_value=False)
Out[111]: 
       a      b
0  False  False
1  False   True
2  False  False
 

也许把df改成pd。数据帧({'a':[1,3,3],'b':[1,3,5]})@BENY谢谢你注意到…更新的答案:)现在看起来好多了~:-)