scala - 替换数据框中的值保持原始值
问题描述
我有一个如下所示的数据框。
+------+----+----+
| col1 |col2|col3|
+------+----+----+
|abc | c |h |
|abc | c |h |
|abc | c |h |
+------+----+----+
对于 col2,我有一个值 c,如上图所示。
现在所有的 c 值都应该用 cat 替换,而 col3 的值 h 应该用 hat 替换。
我可以通过以下语句轻松实现这一点
dataframe.withColumn("col2", when(col("col2").equalTo("c"), "cat").otherwise(col("col2") )
但我也想拥有原始值。就像说我的最终数据框应该如下所示
+------+----+----+-----+----+
| col1 |col2|col3| col4|col5|
+------+----+----+-----+----+
|abc | c |cat | h|hat |
|abc | c |cat | h|hat |
|abc | c |cat | h|hat |
+------+----+----+----+-----+
我怎样才能做到这一点???任何帮助.... :)
解决方案
你只需要给一个新的列名
dataframe.withColumn("col4",
when(col("col2").equalTo("c"), "cat").otherwise(col("col2")
)
.withColumn("col5",
when(col("col3").equalTo("c"), "cat").otherwise(col("col3")
)
withColumn
column
使用您提供的名称创建一个新名称。如果名称已经存在,它只是替换旧列。
输出:
+------+----+----+-----+----+
| col1 |col2|col4| col3|col5|
+------+----+----+-----+----+
|abc | c |cat | h|hat |
|abc | c |cat | h|hat |
|abc | c |cat | h|hat |
+------+----+----+----+-----+
如果您真的想保留前一列,则需要创建一个临时列并交换列名。
希望这可以帮助!
推荐阅读
- ssh - 使用 WinSCP 到 SFTP 时“未配置预期的主机密钥,使用 -hostkey 开关”
- angular - angular6如何通过字符串名称创建注入服务
- python - Python 3 中的关键字是否自动排序?
- sql-server - 从 Byte[] 转换为文件
- java - 使用方法将文本附加到 JFrame 组件
- javascript - Es6:无法从类创建对象
- docusignapi - JSON Web Token Bearer Grant 在 Docusign 中给出“Invalid_grant”作为响应
- user-interface - 球拍/gui:睡觉时不冻结gui
- r - 根据条件过滤来自不同列的日期
- java - 如何使用 Java Spring 的 RestTemplate 的交换方法向 HTTP 请求添加正文?