我试图找出函数在什么地方穿过x=0线。我利用了这样一个事实:当函数穿过x轴时,它的符号会发生变化。在
现在,我有一个像这样的数据帧,我想找到最接近0的两行,假设函数在两个点上穿过x轴。在
A value
0 105 0.662932
1 105 0.662932
2 107 0.052653 # sign changes here when A is 107
3 108 -0.228060 # among these two A 107 is closer to zero
4 110 -0.740819
5 112 -1.188906
6 142 -0.228060 # sign changes here when A is 142
7 143 0.052654 # among these two, A 143 is closer to zero
8 144 0.349638
所需输出:
^{pr2}$
我找到了一个简单的解决方案:
^{1}$解决方案
^{pr2}$结果
慢而纯的熊猫法
您可以使用
^{1}$ ^{pr2}$numpy
来概括该方法:这个解决方案的效率也会大大提高,特别是随着尺寸的扩大。在
感谢@Vince W.提到应该使用
np.where
;我最初使用的是更复杂的方法。在编辑-请参阅@user3483203下面的答案,它比这个快得多。通过在numpy数组(而不是pandas系列)上执行前几个操作(diff、abs、compare equality),您甚至可以提高一点(当我重新运行它们的计时时,速度是原来的2倍)。numpy的
diff
与pandas中的不同,因为它删除了第一个元素,而不是返回NaN
。这意味着我们将获取符号更改的第一行的索引,而不是第二行的索引,并且需要添加一个来获得下一行。在相关问题 更多 >
编程相关推荐