我尝试在polars Dataframe 中使用numpy arctan2。代码在polars之外工作
import polars as pl
import numpy as np
data = pl.from_dict(
{'v': [-4.293,-2.4659,-1.8378,-0.2821,-4.5649,-3.8128,-7.4274,3.3443,3.8604,-4.2200],
'u': [-11.2268,6.3478,7.1681,3.4986,2.7320,-1.0695,-10.1408,11.2327,6.6623,-8.1412]})
这很管用
v = data ['v'].to_list()
u = data ['u'].to_list()
wd = np.round(np.degrees(np.arctan2(v,u).tolist())+180,3)
print(wd)
我尝试了几十种不同的想法
data.with_columns([ ( np.degrees( np.arctan2( pl.col('v'), pl.col('u'),None ) ) + 180 ).alias('wd_ck') ]).head()
data['wd']=data.select([pl.col('v'),pl.col('u')]).apply(np.arctan2,return_dtype=pl.Float64)
我尝试在极坐标 Dataframe 内使用arctans2从v,u计算wd
我用的是windows 11,python 3.9.15,numpy 1.22.3,polars 0.16.2
3条答案
按热度按时间sd2nnvve1#
尝试使用
map
:2o7dmzc52#
至于其他的答案,他们没有利用arctan2和degrees是ufuncs这一事实,你可以直接作为表达式执行。
有点令人困惑的是arctan2有两个参数,如何让polars对一个有两个参数的函数进行运算并不明显,这个问题的答案是使用
reduce
。例如,
对于degree,由于它只带一个参数,因此可以直接使用它,并且在相同的上下文中仍然具有两个函数,以及添加180和舍入...
djmepvbi3#
编辑:在评论中
@bgk
反馈后扩展答案要在 Dataframe 中创建列
wd
:要获得相同的结果而不转换为列表:
其中
arctan
计算为v / u
:然后将
np.degrees
:而
round
:快速测试以检查示例的结果: