values = [[5.5, 2.5, 10.0], [2.0, 4.5, 1.0], [2.5, 5.2, 8.0],[4.5, 5.8, 4.8], [4.6, 6.3, 9.6],[4.1, 6.4, 9.0],[5.1, 2.3, 3],[5.1, 2.3, 11.1],[5.1, 2.3, 10],[5.1, 2.3, 11.1],[5.1, 2.3, 20],[5.1, 2.3, 31],[5.1, 2.3, 5]]
df = pd.DataFrame(values, columns=['col1', 'col2', 'col3'])
输出
col1 col2 col3
0 5.5 2.5 10.0
1 2.0 4.5 1.0
2 2.5 5.2 8.0
3 4.5 5.8 4.8
4 4.6 6.3 9.6
5 4.1 6.4 9.0
6 5.1 2.3 3.0
7 5.1 2.3 11.1
8 5.1 2.3 10.0
9 5.1 2.3 11.1
10 5.1 2.3 20.0
11 5.1 2.3 31.0
12 5.1 2.3 5.0
我现在需要 增加一个新列 col4
条件是 从当前col3对应的当前行值 向上寻找第一次比当前值大的值到当前值之间的个数作为新增列的对应的行值
最终需要的数据是
col1 col2 col3 col4
0 5.5 2.5 10.0 0
1 2.0 4.5 1.0 0
2 2.5 5.2 8.0 1
3 4.5 5.8 4.8 0
4 4.6 6.3 9.6 3
5 4.1 6.4 9.0 0
6 5.1 2.3 3.0 0
7 5.1 2.3 11.1 7
8 5.1 2.3 10.0 0
9 5.1 2.3 11.1 1
10 5.1 2.3 20.0 10
11 5.1 2.3 31.0 11
12 5.1 2.3 5.0 0
我知道把col3的值放数组里面,用for逆向循环可以轻松实现这个需求,但是请问 怎么用pandas写高效的代码,来实现这个功能;
给你一个更加简单高效的方式,在大量数据的情况下,利用矩阵计算,避免查找循环,能够让时间复杂度降到o(1)。