值小于行的计数总和

Ces*_*sar 3 python pandas

我正在使用Pandas来创建新列,该列将搜索整个列中的值[1-100],并将计算小于当前行的值。

请参见下面的[df]示例:

[A][NewCol]
 1 0
 3 2
 2 1
 5 4
 8 5
 3 2
Run Code Online (Sandbox Code Playgroud)

本质上,对于每一行,我需要查看整个A列,并计算比当前行少多少个值。因此,对于值5,有4个值小于(<)小于5(1,2,3,3)。

最简单的方法是什么?

谢谢!

Sco*_*ton 7

这样做的一种方法是,rank与结合使用method='min'

df['NewCol'] = (df['A'].rank(method='min') - 1).astype(int)
Run Code Online (Sandbox Code Playgroud)

输出:

   A  NewCol
0  1       0
1  3       2
2  2       1
3  5       4
4  8       5
5  3       2
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 7

我正在使用numpy广播

s=df.A.values
(s[:,None]>s).sum(1)
Out[649]: array([0, 2, 1, 4, 5, 2])

#df['NewCol']=(s[:,None]>s).sum(1)
Run Code Online (Sandbox Code Playgroud)

定时

df=pd.concat([df]*1000)

%%timeit
s=df.A.values
(s[:,None]>s).sum(1)
10 loops, best of 3: 83.7 ms per loop
%timeit (df['A'].rank(method='min') - 1).astype(int)
1000 loops, best of 3: 479 µs per loop
Run Code Online (Sandbox Code Playgroud)