我想基于输入列在pandas数据框中添加一个新列 . 必须像这样填充新添加的列 .
- 第一行必须填入最近除以100的数字 .
从下一行开始 - 将重复输出,直到其与输入值的差异大于或等于100 .
input output
11700.15 11700
11695.20 11700
11661.00 11700
11630.40 11700
11666.10 11700
11600.30 11700
11600.00 11600
11555.40 11600
11655.20 11600
11699.00 11600
11701.55 11700
11799.44 11700
11604.65 11700
11600.33 11700
11599.65 11600
在熊猫中最优雅的方式是什么?
3 回答
我提出的解决方案:
它产生了OP给出的输出 .
据我所知,没有't an intuitive approach here that doesn't涉及显式迭代,这对于
numpy
和pandas
来说并不理想 . 但是,这个问题的时间复杂度是O(n),这使得它成为numba
库的一个很好的目标 . 这使我们能够提出一个非常有效的解决方案 .关于我的解决方案的一个注意事项,我使用
(a + threshold // 2) // threshold * threshold
,与使用np.round(a, decimals=-2)
相比看起来冗长 . 这是由于使用numba
的nopython=True
,flag的性质,它与np.round
函数不兼容 .我们来测试一下:
如果要将舍入值与输入进行比较而不是实际值,只需在循环中对上面的函数进行以下更改,从而提供问题的输出 .
为了测试效率,让我们在更大的数据集上运行它:
无论如何都不优雅,但后来我觉得没有办法绕过这个循环(可能是错的!):
OUTPUT:
我相信
output
中的最后两个值必须是1600 .