当前位置: 首页 > 知识库问答 >
问题:

将函数按行应用于数据帧

空翼
2023-03-14

我必须从二维坐标计算希尔伯特曲线上的距离。使用hilbertcurve包,我构建了自己的“hilbert”函数。坐标存储在数据帧(列1和列2)中。如您所见,我的函数在应用于两个值(test)时有效。

然而,它只是不工作时,应用行明智通过应用函数!这是为什么呢?我到底做错了什么?我需要一个额外的列“希尔伯特”,希尔伯特距离在列“col_1”和“col_2”中给出。

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)

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

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

谢谢你的帮助!

共有2个答案

华知
2023-03-14

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

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

df['hilbert'] = df.apply(lambda row: hilbert(row['col_1'], row['col_2']), axis=1)
濮冠宇
2023-03-14

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

df.apply(lambda x: hilbert(x['col_1'], x['col_2']), axis=1)

因此,给定的lambda函数将应用于每一行。

 类似资料:
  • 并将其应用于数据表的一列--这是我希望这样做的: 我还没有找到任何简单的方法,正在努力找出如何做到这一点。一定有一个更简单的方法,比将数据rame转换为和RDD,然后从RDD中选择行来获得正确的字段,并将函数映射到所有的值,是吗?创建一个SQL表,然后用一个sparkSQL UDF来完成这个任务,这更简洁吗?

  • 我从这个URL刮取了这个表: "https://www.patriotsoftware.com/blog/accounting/average-cost-living-by-state/" 看起来像这样: 然后我编写了这个函数来帮助我将字符串转换成整数: 当我只将函数应用于一列时,它就会工作。我在这里找到了关于在多个列上使用的答案:如何将函数应用于多个列 但我下面的代码不起作用,也不会产生错误:

  • 如果之前已经解决了这个问题,请提前道歉,但我已经尝试过浏览所有与ddply、sApplication和Application相关的问题,但我一生都无法解决这个问题... 我已经编写了一个函数CountMonths,它将计费周期中的日、月和总天数作为参数,并返回计费周期中的日历月数: 我想将此函数应用于包含客户账单记录的data.frame中的每一行,例如。 我尝试了几种选择,但没有一种效果好。具体

  • 怎么办? **添加详细示例如下***

  • 问题内容: 在将其标记为重复之前,让我向您解释,我已经阅读了此页面以及许多其他内容,但仍然没有找到解决问题的方法。 这就是我遇到的问题:给定两个2D数组,我想在两个数组上应用函数F。F将两个一维数组作为输入。 请注意,这仅用于演示。这里真正的问题是在两组一维数组上工作的泛型函数F。 向量化要么完全失败,要么出错,或者应用逐个元素的功能,而不是逐个数组(或逐行) 迭代地应用功能;例如,使用上面所定义

  • 我有以下函数(一个以列作为输入的热编码函数)。我基本上想把它应用到我的数据框中的一列,但似乎不明白出了什么问题。 猜我怎么称呼它有问题?