Python 如果是负数,则使用where()进行计算

Python 如果是负数,则使用where()进行计算,python,pandas,dataframe,Python,Pandas,Dataframe,下面是代码和输出,我试图得到的结果显示在“exp”列中,因为您可以看到“countif”列只计算5列,但我希望它只计算负值 例如:索引0,df1[0]应该等于2 我做错了什么 蟒蛇 import pandas as pd import numpy as np a = ['A','B','C','B','C','A','A','B','C','C','A','C','B','A'] b = [2,4,1,1,2,5,-1,2,2,3,4,3,3,3] c = [-2,4,1,-1,2,5,1,

下面是代码和输出,我试图得到的结果显示在“exp”列中,因为您可以看到“countif”列只计算5列,但我希望它只计算负值

例如:索引0,
df1[0]
应该等于
2

我做错了什么

蟒蛇

import pandas as pd
import numpy as np 

a = ['A','B','C','B','C','A','A','B','C','C','A','C','B','A']
b = [2,4,1,1,2,5,-1,2,2,3,4,3,3,3]
c = [-2,4,1,-1,2,5,1,2,2,3,4,3,3,3]
d = [-2,-4,1,-1,2,5,1,2,2,3,4,3,3,3]
exp = [2,1,0,2,0,0,1,0,0,0,0,0,0,0]

df1 = pd.DataFrame({'b':b,'c':c,'d':d,'exp':exp}, columns=['b','c','d','exp'])
df1['sumif'] = df1.where(df1<0,0).sum(1)
df1['countif'] = df1.where(df1<0,0).count(1)
df1
# df1.sort_values(['a','countif'], ascending=[True, True])
将熊猫作为pd导入
将numpy作为np导入
a=['a','B','C','B','C','a','a','B','C','C','a','C','B','a']
b=[2,4,1,1,2,5,-1,2,2,3,4,3,3]
c=[-2,4,1,-1,2,5,1,2,2,3,4,3,3]
d=[-2,-4,1,-1,2,5,1,2,2,3,4,3,3]
exp=[2,1,0,2,0,0,1,0,0,0,0,0,0]
df1=pd.DataFrame({'b':b,'c':c,'d':d,'exp':exp},列=['b','c','d','exp']))

df1['sumif']=df1。其中(df1您不需要
where
在这里,您可以简单地使用:

编辑:根据OP的意见,包括带有
iloc
的解决方案。lt

In [1609]: df1['exp'] = df1.iloc[:, :3].lt(0).sum(1)

您不需要
此处的
,您只需使用:

编辑:根据OP的意见,包括带有
iloc
的解决方案。lt

In [1609]: df1['exp'] = df1.iloc[:, :3].lt(0).sum(1)
首先,它根据条件将
False
值替换为
0
(此处False大于等于
0
),因此不能用于计数:

print (df1.iloc[:, :3].where(df1<0,0))
    b  c  d
0   0 -2 -2
1   0  0 -4
2   0  0  0
3   0 -1 -1
4   0  0  0
5   0  0  0
6  -1  0  0
7   0  0  0
8   0  0  0
9   0  0  0
10  0  0  0
11  0  0  0
12  0  0  0
13  0  0  0
首先,它根据条件将
False
值替换为
0
(此处False大于等于
0
),因此不能用于计数:

print (df1.iloc[:, :3].where(df1<0,0))
    b  c  d
0   0 -2 -2
1   0  0 -4
2   0  0  0
3   0 -1 -1
4   0  0  0
5   0  0  0
6  -1  0  0
7   0  0  0
8   0  0  0
9   0  0  0
10  0  0  0
11  0  0  0
12  0  0  0
13  0  0  0

感谢您的快速响应,没有意识到“where”将不符合条件的值替换为0,这是有意义的!感谢您的快速响应,没有意识到“where”将不符合条件的值替换为0,这是有意义的!感谢您的快速响应!学习了一个新函数,没有意识到可以使用它。是吗可以以任何方式将df.lt()与iloc一起使用吗?[编辑]@cookies是的,您可以这样做:
df1['exp']=df1.iloc[:,:3]。lt(0).sum(1)
。感谢您的快速响应!学习了一个新函数,但没有意识到可以使用它。可以以任何方式将df.lt()与iloc一起使用吗?[编辑]@cookies是的,您可以这样做:
df1['exp']=df1.iloc[:,:3].lt(0).sum(1)