我想在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怎么能做到呢?我跟着这个,但没有运气。
如果要将函数应用于数据帧的每一行,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))
替换。
很简单。你不需要为此编写任何函数,你所能做的就是通过汇总所有你想要的列来创建一个新的列。
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和下面的函数,但是这会消耗更多的时间和内存。 有人有更好的方法吗? 并获得: