Python pandas中元素和行条件之间的逻辑AND(bolean和矩阵与列之间)
编辑: 如何在熊猫身上组合不同大小的逻辑面具? 例如,查找满足elementwise条件的所有元素,同时它们所在的行也满足另一个条件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
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谢谢你注意到…更新的答案:)现在看起来好多了~:-)