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

对数据框的所有行应用函数[重复]

唐腾
2023-03-14

我想在DataFrame的所有行上应用一个函数。例子:

|A  |B   |C   |
|1  |3   |5   |
|6  |2   |0   |
|8  |2   |7   |
|0  |9   |4   |


Myfunction(df)

Myfunction(df: DataFrame):{
//Apply sum of columns on each row
}

想要的输出:

1+3+5 = 9
6+2+0 = 8
...

Scala怎么能做到呢?我跟着这个,但没有运气。

共有2个答案

葛成双
2023-03-14

如果要将函数应用于数据帧的每一行,Map就是解决方案。对于每一行,您都可以返回一个元组,并生成一个新的RDD。

当使用数据集或RDD时,这是完美的,但不是真正用于数据帧。对于您的用例和数据帧,我建议只添加一列并使用列对象来执行您想要的操作。

scala prettyprint-override">// Using expr
df.withColumn("TOTAL", expr("A+B+C"))
// Using columns
df.withColumn("TOTAL", col("A")+col("B")+col("C"))
// Using dynamic selection of all columns
df.withColumn("TOTAL", df.colums.map(col).reduce((c1, c2) => c1 + c2))

在这种情况下,你会对这个问题非常感兴趣。UDF也是一个很好的解决方案,在这里更好地解释。

如果您不想保留源列,您可以用. Select(value.alias(name))替换

蓬化
2023-03-14

很简单。你不需要为此编写任何函数,你所能做的就是通过汇总所有你想要的列来创建一个新的列。

scala> df.show
+---+---+---+
|  A|  B|  C|
+---+---+---+
|  1|  2|  3|
|  1|  2|  4|
|  1|  2|  5|
+---+---+---+


scala> df.withColumn("sum",col("A")+col("B")+col("C")).show
+---+---+---+---+
|  A|  B|  C|sum|
+---+---+---+---+
|  1|  2|  3|  6|
|  1|  2|  4|  7|
|  1|  2|  5|  8|
+---+---+---+---+

编辑:

您可以在每一行上运行map函数,并使用行索引/字段名获得总和。

scala> df.map(x=>x.getInt(0) + x.getInt(1) + x.getInt(2)).toDF("sum").show
+---+
|sum|
+---+
|  6|
|  7|
|  8|
+---+


scala> df.map(x=>x.getInt(x.fieldIndex("A")) + x.getInt(x.fieldIndex("B")) + x.getInt(x.fieldIndex("C"))).toDF("sum").show
+---+
|sum|
+---+
|  6|
|  7|
|  8|
+---+
 类似资料:
  • 我是熊猫数据框的新手,我想应用一个函数,在同一列中取几行。就像当你应用函数diff(),但我想计算文本之间的距离。所以我定义了一个测量距离的函数,我试图使用应用,但我不知道如何选择几行。下面我展示了一个我尝试过的例子和我所期望的: 但它不起作用。我想得到的是: 提前感谢您为我提供的任何帮助。

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

  • 问题内容: 我是Python的新手,我不确定如何解决以下问题。 我有一个功能: 说我有数据框 而和是浮点类型。现在,我想将公式应用于数据帧的每一行,并将其作为额外的行“ Q”返回。一个示例(不起作用)将是: (仅返回“地图”类型) 在我的项目中,我将需要更多此类处理,并希望找到可行的方法。 问题答案: 以下应该工作: 如果您要做的只是计算某个结果的平方根,则使用矢量化的方法,它将大大加快速度: 时

  • 如果我想计算两个向量的n维距离,我可以使用如下函数: 现在,我想把它扩展到一个矩阵设置:我想计算两个矩阵的每对行的n维距离。 其中,的每一列都包含和的每一行之间的距离度量(因此是和之间的距离。 如果我在上计算列平均值,我可以获得中每行与所有行之间的平均距离。 所以23.79094是和之间的平均距离,24.90281是和之间的平均距离,以此类推。 问:如果不使用for循环,如何得到相同的解决方案?

  • 我试图输出数据帧的所有列。 代码如下: 当我输出数据帧时,并非所有列都显示出来。这有21列,在一些列之间只有点“…”我正在使用ipython笔记本。有没有一种方法可以忽略这一点。

  • 读取列中包含时间值的csv文件,并尽可能高效地获取包含1列值和日期时间索引的数据帧。我做了一个read_csv,然后是一个stack和下面的函数,但是这会消耗更多的时间和内存。 有人有更好的方法吗? 并获得: