我正在使用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)。
最简单的方法是什么?
谢谢!
这样做的一种方法是,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)
我正在使用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)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |