python - 如何在数据框中创建所有/大多数列的副本
问题描述
我想保留原始列集,但使用映射创建具有更新列名的副本。例如,如果原始现有数据框有列:
'first_name_2020','other_name_2020', 'last_name_2020'
我想输入参数:
forename = 'first_name_2020'
middlename = 'other_name_2020'
surname = 'last_name_2020'
previous_surname = None
然后输出一个数据框,该数据框具有原始列集,但还添加了这些附加的标准化命名(包括为缺少的名称字段添加的空列)。列集大于三/四,因此我需要遍历列表或字典/映射,而不是键入多个固定宽度的列语句
有如下数据框:
df_in = spark.sparkContext.parallelize([('JOHN','ANDREW','SMITH'),('JANE','MAY','JONES')]).toDF(['first_name_2020','other_name_2020','last_name_2020'])
希望输出 df 看起来像:
df_out = spark.sparkContext.parallelize([('JOHN','ANDREW','SMITH','JOHN','ANDREW','SMITH',''),('JANE','MAY','JONES','JANE','MAY','JONES','')]).toDF(['first_name_2020','other_name_2020','last_name_2020','forename','middlename','surname','previous_surname'])
解决方案
它非常简单,您只需遍历列并将其复制到 new_column
columns = df.columns
for col_name in columns:
df = df.withColumn(col_name+”_new”, df[col_name])
对于最后的空列
from pyspark.sql.functions import lit
df = df.withColumn(‘previous_surname’, lit(‘’))
推荐阅读
- python - 即使与 Python 客户端 Elasticsearch 的连接丢失,如何恢复流数据?
- java - 更新 recyclerview 中帖子的评论计数
- javascript - 使用 JS 向 Google Fit REST Api 添加会话和信息的问题
- git - Flutter 升级后 Flutter 找不到 git
- python - Python 无法识别 sum()。返回错误
- django - Django 中返回的多个对象
- python - Pandas:使用太多内存和条件滚动计数
- activemq - ActiveMQ ProtocolException 消息编码无效
- google-cloud-platform - 用于创建 Firestore 的 Terraform
- linux - 如何使用 Bluez L2CAP 发送更多字节?