Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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,我有一个这样的数据框 df col1 col2 col3 col4 1 3 4 2 4 6 7 7 3 6 3 3 现在我想找出有多少个值小于col4值,并将计数存储在另一列中,例如,在第一行中,有1个值小于2,因此新值将为1,最终数据帧应如下所示 col1 col2 col3 col4 col5 1 3

我有一个这样的数据框

 df
 col1    col2    col3    col4
  1       3       4       2
  4       6       7       7
  3       6       3       3
现在我想找出有多少个值小于col4值,并将计数存储在另一列中,例如,在第一行中,有1个值小于2,因此新值将为1,最终数据帧应如下所示

col1    col2    col3    col4    col5
  1       3       4       2       1
  4       6       7       7       2
  3       6       3       3       0

我可以通过比较行值使用for循环来实现这一点,但执行时间将非常长。我正在寻找任何快捷方式或任何其他方法来最有效地进行计算。

我们可以在numpy中运行计算,使用and,比较每一行,求布尔结果的和,并分配给
col5

df['col5'] = np.sum(np.less(df.to_numpy()[:,:-1],
                            df.col4.to_numpy()[:,np.newaxis]),
                    axis=1)

df

  col1  col2    col3    col4    col5
0   1   3        4        2     1
1   4   6        7        7     2
2   3   6        3        3     0

我们可以使用and在numpy中运行计算,比较每一行,对布尔结果求和,并分配给
col5

df['col5'] = np.sum(np.less(df.to_numpy()[:,:-1],
                            df.col4.to_numpy()[:,np.newaxis]),
                    axis=1)

df

  col1  col2    col3    col4    col5
0   1   3        4        2     1
1   4   6        7        7     2
2   3   6        3        3     0

执行
lt
并通过
axis=0

df['new']=df.lt(df.col4,axis=0).sum(1)
df
   col1  col2  col3  col4  new
0     1     3     4     2    1
1     4     6     7     7    2
2     3     6     3     3    0

执行
lt
并通过
axis=0

df['new']=df.lt(df.col4,axis=0).sum(1)
df
   col1  col2  col3  col4  new
0     1     3     4     2    1
1     4     6     7     7    2
2     3     6     3     3    0

我们可以通过使用
数据帧来利用广播。lt
超过
轴=0

df['col5'] = df.loc[:, :'col3'].lt(df['col4'], axis=0).sum(axis=1)

   col1  col2  col3  col4  col5
0     1     3     4     2     1
1     4     6     7     7     2
2     3     6     3     3     0
或者,您可以明确使用:

df['col5']=np.sum(df.loc[:,:'col3']
我们可以通过使用
数据帧来利用广播。lt
超过
轴=0

df['col5'] = df.loc[:, :'col3'].lt(df['col4'], axis=0).sum(axis=1)

   col1  col2  col3  col4  col5
0     1     3     4     2     1
1     4     6     7     7     2
2     3     6     3     3     0
或者,您可以明确使用:

df['col5']=np.sum(df.loc[:,:'col3']
使用
df.lt
sum

df[['col1','col2','col3']].lt(df.col4.tolist(), axis=0).sum(1)

Out[76]:
0    1
1    2
2    0
dtype: int64

使用
df.lt
sum

df[['col1','col2','col3']].lt(df.col4.tolist(), axis=0).sum(1)

Out[76]:
0    1
1    2
2    0
dtype: int64