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