计算与条件匹配的行中的值-Python

计算与条件匹配的行中的值-Python,python,pandas,if-statement,count,Python,Pandas,If Statement,Count,我有一个包含整数和NaN的数据帧。我几乎希望创建一个countif语句,它将迭代一行中的每个值,并对大于0的值进行计数 以下是一个示例: d = {'col1': [1, "", 5, 0], 'col2': [3, 4, "", 7], 'col3': [2, 8, "", 3]} df = pd.DataFrame(data=d) df = df.convert_objects(convert_numeric = True) df Out[356]: col1 col2 col3 0

我有一个包含整数和NaN的数据帧。我几乎希望创建一个countif语句,它将迭代一行中的每个值,并对大于0的值进行计数

以下是一个示例:

d = {'col1': [1, "", 5, 0], 'col2': [3, 4, "", 7], 'col3': [2, 8, "", 3]}
df = pd.DataFrame(data=d)
df = df.convert_objects(convert_numeric = True)

df
Out[356]: 
col1  col2  col3
0   1.0   3.0   2.0
1   NaN   4.0   8.0
2   5.0   NaN   NaN
3   0.0   7.0   3.0
我一直在使用下面的函数来计算非NaN的值,但是我想对大于0的值设置一个条件&非NaN

df.apply(lambda x: x.count(), axis = 1)
Out[357]: 
0    3
1    2
2    1
3    3
dtype: int64

如果有人能提供建议,说明如何根据特定条件计算行中的值,这将非常有用,请提前感谢。

Pandas允许您广播比较器,因此df>0创建一个数据帧,其中每个条目都是布尔值,根据df的对应条目是否大于0,这也会考虑NaN,因为np.nan>0被计算为False。然后,sum方法将True强制为1,将False强制为0,并查找总数。由于需要行总计,因此希望轴为1。因此:


df>0.sumaxis=1允许广播比较器,因此df>0根据df的相应条目是否大于0创建一个数据帧,其中每个条目都是布尔值,这也会考虑NaN,因为np.NaN>0被评估为False。然后,sum方法将True强制为1,将False强制为0,并查找总数。由于需要行总计,因此希望轴为1。因此:

df>0.sumaxis=1

这应该可以:

df.apply(lambda s: (s > 0).sum(), axis=1)
将其转换为布尔值并求和

样本输出:

  df.apply(lambda s: (s > 1).sum(), axis=1)
输出:

  2
  2
  1
  2
dtype: int64
您也可以在此处使用特定的按列条件,例如:

df.apply(lambda s: (s.col1 > 1).sum(), axis=1)
这应该起作用:

df.apply(lambda s: (s > 0).sum(), axis=1)
将其转换为布尔值并求和

样本输出:

  df.apply(lambda s: (s > 1).sum(), axis=1)
输出:

  2
  2
  1
  2
dtype: int64
您也可以在此处使用特定的按列条件,例如:

df.apply(lambda s: (s.col1 > 1).sum(), axis=1)

df>0.sumaxis=1?最后一行有3个条目,但最后一行中只有两个条目大于0。是否要计算大于或等于0的条目数?请查看更新的答案。df>0。sumaxis=1?最后一行有3个条目,但最后一行中只有两个条目大于0。是否要计算大于或等于0的数量?请查看更新的答案。