当键出现在地图中时,有条件地替换数据框中的值

沃尔夫·伦德尔

我在 Scala 火花环境中有两个对象。第一个是具有许多字符串类型的列的数据框。第二个是一个以 column_names 作为键的 Map,每个键的值是另一个定义替换值的 Map。

我想遍历 Map of Maps,将 column_name 键与数据框键匹配,然后使用替换值映射来替换值。如果替换值映射中不存在该值,那么我想返回该列的原始值。

实现此目的的最佳方法是什么:

val replacements = Map("Col_1" -> Map("Male" -> "0", "Female" -> "1"),
                       "Col_2" -> Map("2" -> "1", "3" -> "1", "4" -> "1")

val df = Seq(("Mary", "Female", "0"), ("John", "Male", "2"), ("Luke", "Male", "1")).toDF(List("name", "Col_1", "Col_2").toSeq:_*)

df.show
+----+------+-----+
|name| Col_1|Col_2|
+----+------+-----+
|Mary|Female|    0|
|John|  Male|    2|
|Luke|  Male|    1|
+----+------+-----+

//I hoped to do something like this:

val fixed_df = replacements.foldLeft(df) { 
case (tmpDF, (colName, foo: Map[key, v])) => tmpDF.withColumn(colName, when($"$colName" isin(foo.keys.to[List]:_*), foo($"$colName")).otherwise($"$colName"))
    }

//to get output like this:
fixed_df.take(3)
+----+------+-----+
|name| Col_1|Col_2|
+----+------+-----+
|Mary|     1|    0|
|John|     0|    1|
|Luke|     0|    1|
+----+------+-----+

请注意,感谢@tzachz 提供类似的不同解决方案的帮助。

阿尔珀 t。特克

您只需要na.replace

replacements.keys.foldLeft(df)(
  (acc, key) => acc.na.replace(key, replacements(key))
).show

// +----+-----+-----+
// |name|Col_1|Col_2|
// +----+-----+-----+
// |Mary|    1|    0|
// |John|    0|    1|
// |Luke|    0|    1|
// +----+-----+-----+

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当字符串出现在R:时间序列的单独列中时,有条件地更改单元格值

有条件地替换数据框(熊猫)中选定列中的所有值

有条件地替换熊猫数据框中数组列表中的值

R:有条件地替换数据框中几列中的值

如何有条件地替换数据框中的 NaN 值?

有条件地替换熊猫数据框中的值-numpy行为

如何使用if / then语句有条件地替换r数据框中的值

如何有条件地替换数据框中的值?

有条件地替换熊猫数据框中的值

使用R有条件地替换数据框中的列值

有条件替换pyspark数据框中的值

有条件地用其他数据框中的值替换熊猫中的列值

R-有条件地用另一个数据框中的值替换值

如何有条件地计数和记录样本是否出现在另一个数据集的行中?

让一个项目有条件地出现在另一个组件中

如何有条件地用整数替换空值 Pyspark 数据框

Scala -- 有条件地替换数据框的列值

有条件地替换多个数据框的值R

如何在熊猫数据框中有条件地检查和替换日期值?

在数据框中有条件地在行范围内替换值

有条件地替换值

如何有条件地替换熊猫数据框列中的子字符串?

有条件地替换数据框中的字符串

有条件地替换熊猫中的缺失值

有条件地替换列中的值

使用Tidyverse根据另一个数据框列中的值有条件地替换数据框列中的值

在地图中使用地图有条件地渲染数据

有条件地更新数据框中的日期

有条件地从数据框中删除行