擅长:python、mysql、java
<p>如果要保留可读的数学函数,以及当前函数的简单转换,请使用<a href="http://pandas.pydata.org/pandas-docs/stable/enhancingperf.html#expression-evaluation-via-eval-experimental" rel="nofollow noreferrer">^{<cd1>}</a>:</p>
<pre><code>df.eval("""
northing = 3189068.5 * log((1.0 + sin(latitude * 0.017453292519943295)) / (1.0 - sin(latitude * 0.017453292519943295)))
easting = 6378137.0 * longitude * 0.017453292519943295""", inplace=False)
Out[51]:
id longitude latitude northing easting
0 11135465 -73.986893 40.761093 4.977167e+06 -8.236183e+06
1 1113546 -73.979645 40.747814 4.975215e+06 -8.235376e+06
2 11135467 -74.001244 40.743172 4.974533e+06 -8.237781e+06
3 11135468 -73.997818 40.726055 4.972018e+06 -8.237399e+06
</code></pre>
<p>由于不能使用<code>if</code>语句,因此您必须在语法上做一些工作,但是可以在调用<code>eval</code>之前轻松地过滤出边界外的数据。如果要直接分配新列,也可以使用<code>inplace=True</code>。在</p>
<p>如果你对保持数学语法不感兴趣,并且正在全速搜索,那么numpy答案的执行速度可能会更快。在</p>