首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Pandas DataFrame中用一个参数计算DataFrame

在Pandas DataFrame中用一个参数计算DataFrame
EN

Stack Overflow用户
提问于 2022-11-02 13:08:45
回答 2查看 49关注 0票数 1

我有一个DF,我需要计算两个北风和南风分量的弧。但是,arctan2函数似乎只接受两个参数x,y,如文档所示:

代码语言:javascript
运行
复制
numpy.arctan2(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = <ufunc 'arctan2'>

然而,我需要除以x,y分量才能得到我想要的答案。所以,我得这么做-

dfout = np.arctan2(x/ y )使用1个参数,但文档中说我需要2个参数x,y。

我认为"/“符号是一种选择,但我不确定这是否适用,也不确定如何这样做。有什么想法吗?

我的数据在df中如下所示:

代码语言:javascript
运行
复制
day hour    Cns       Cew
1   0       126.002   -100.812
1   1      -42.3775    18.6631
1   2       64.3313   -121.167

我需要在上面的例子中这样做:

代码语言:javascript
运行
复制
dfout = np.arctan2(df.Cew/df.Cns)

但我知道这个错误-

代码语言:javascript
运行
复制
TypeError: arctan2() takes from 2 to 3 positional arguments but 1 were given

我试过了,但是语法错误。

代码语言:javascript
运行
复制
dfout = np.arctan2(df.Cew,df.Cns,/)

使用下面的这个没有提供正确的答案,因为我试图计算平均风向使用Cew (东西)和Cns (北-南)组成部分的风。

这不管用-

dfout = np.arctan2(Cew,Cns)。

我的角度从-180度到+ 180度。

非常感谢,

EN

回答 2

Stack Overflow用户

发布于 2022-11-02 13:28:32

接受一个参数的函数称为np.arctan。但我不确定你真的需要它。

代码语言:javascript
运行
复制
np.arctan(-100.812/126.002)
# -0.6747912684731013
np.arctan2(-100.812, 126.002)
# -0.6747912684731013

所以你看..。你为什么要自己去做除法,而不是让np.arctan2去做呢?

另外,np.arctan2更好。因为np.arctan不知道确切的角度,因为缺少一个信息。这些信息就是方向。

想想45°的角度。np.arctan(1/1) =π/4.如预期。显然,np.arctan2(1,1)也是如此。但是,如果坐标是(-1,-1)呢?np.arctan(-1/-1)也是π/4 (明显的是:-1/-1=1/1=1)。但(-1,-1)角不是45°,而是相反的方向,即5π/4 (或-3π/4)。

代码语言:javascript
运行
复制
np.arctan(1/1)
# 0.7853981633974483
np.arctan2(1,1)
# 0.7853981633974483
np.arctan(-1/-1)
# 0.7853981633974483
np.arctan2(-1,-1)
# -2.356194490192345

通常,人们希望(-1,-1)的角度是-3π/4,而不是π/4。

您的样本数据中有这样的情况。

代码语言:javascript
运行
复制
np.arctan(18.6631/-42.3775)
# -0.41484291425043723
np.arctan2(18.6631,-42.3775)
# 2.726749739339356

第二个(除非我遗漏了您的应用程序的特性)更好。您期望(-42.3775,18.6631)位于第二象限的某个位置,即π/2和π之间。正如arctan2所说。但是把它放在第四位。

所以在你的情况下

代码语言:javascript
运行
复制
# Either
dfout = np.arctan2(df.Cew, df.Cns)
# Or
dfout = np.arctan(df.Cew/df.Cns)

但第一个可能是你想要的。

最后一点:arctan2的参数不是x和y,而是y和x。同样,您应该用的不是x/y,而是y/x。因为我不知道您的CewCns到底是什么,所以我让它保持原样。但我猜想它的意思是“东西”和“南北”,所以你可以用

代码语言:javascript
运行
复制
dfout = np.arctan2(df.Cns, df.Cew)
# Or
dfout = np.arctan(df.Cns/df.Cew)

但这不是一个编码问题,更多的是一个数学问题(你想要计算的是什么),所以我让你决定。

票数 1
EN

Stack Overflow用户

发布于 2022-11-02 13:15:19

你应该直接用:

代码语言:javascript
运行
复制
dfout = np.arctan2(df.Cew, df.Cns)

(或者交换输入np.arctan2(df.Cns, df.Cew) --从问题本身看还不清楚,但是您应该能够从文档和您对输入的了解中了解到这一点)。

np.arctan2()实现atan2(y, x),这是为了解决arctan(y / x)y / x参数中的符号组合造成的歧义,因此需要对这两个参数进行

如果您不需要解决这个歧义,您可以安全地使用np.arctan(),它只使用一个参数-- y / x

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74289691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档