首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数行在熊猫数据中的应用

函数行在熊猫数据中的应用
EN

Stack Overflow用户
提问于 2020-05-21 19:13:56
回答 2查看 18.2K关注 0票数 4

我必须计算出从二维坐标到希尔伯特曲线的距离。用希尔伯特曲线包,我建立了自己的“希尔伯特”-function,以做到这一点。坐标存储在一个数据(col_1和col_2)中。正如您所看到的,当应用于两个值(test)时,我的函数可以工作。

然而,它只是不工作时,应用行通过应用-功能!为什么会这样呢?我在这里做错什么了?我需要一个额外的列“希尔伯特”与希尔伯特距离给出的x和y坐标列"col_1“和"col_2”。

代码语言:javascript
复制
import pandas as pd
from hilbertcurve.hilbertcurve import HilbertCurve

df = pd.DataFrame({'ID': ['1', '2', '3'],
                   'col_1': [0, 2, 3],
                   'col_2': [1, 4, 5]})


def hilbert(x, y):
    n = 2
    p = 7
    hilcur = HilbertCurve(p, n)
    dist = hilcur.distance_from_coordinates([x, y])
    return dist


test = hilbert(df.col_1[2], df.col_2[2])

df["hilbert"] = df.apply(hilbert(df.col_1, df.col_2), axis=0)

最后一个命令以错误结尾:

代码语言:javascript
复制
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-21 19:33:51

由于应用程序中有hilbert(df.col_1, df.col_2),因此立即尝试使用这两列的完整pd.Serieses调用函数,从而触发该错误。你应该做的是:

代码语言:javascript
复制
df.apply(lambda x: hilbert(x['col_1'], x['col_2']), axis=1)

以便将给定的lambda函数应用于每一行。

票数 11
EN

Stack Overflow用户

发布于 2020-05-21 19:37:33

您必须将您的轴定义为1,因为您希望将函数应用于行,而不是列。

您可以定义一个lambda函数,以便只对以下两行应用hilbert:

代码语言:javascript
复制
df['hilbert'] = df.apply(lambda row: hilbert(row['col_1'], row['col_2']), axis=1)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61942138

复制
相关文章

相似问题

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