我有一个Pandas数据框。我尝试将包含字符串值的两列合并为一个列表,然后使用zip函数,将列表中的每个元素用“_”连接起来。我的数据集如下所示:
df['column_1']: 'abc, def, ghi'
df['column_2']: '1.0, 2.0, 3.0'
我希望将数据框中每一行的这两列合并为第三列,如下所示。
df['column_3']: [abc_1.0, def_2.0, ghi_3.0]
我已经成功使用下面的Python代码完成了此任务,但是数据框非常大,对整个数据框运行需要很长时间。为了提高效率,我希望在PySpark中完成同样的任务。我已经成功地将数据读入Spark数据框,但是我很难确定如何使用PySpark等效函数复制Pandas函数。如何在PySpark中获得所需的结果?
df['column_3'] = df['column_2']
for index, row in df.iterrows():
while index < 3:
if isinstance(row['column_1'], str):
row['column_1'] = list(row['column_1'].split(','))
row['column_2'] = list(row['column_2'].split(','))
row['column_3'] = ['_'.join(map(str, i)) for i in zip(list(row['column_1']), list(row['column_2']))]
我已经使用以下代码将两列转换为PySpark中的数组:
from pyspark.sql.types import ArrayType, IntegerType, StringType
from pyspark.sql.functions import col, split
crash.withColumn("column_1",
split(col("column_1"), ",\s*").cast(ArrayType(StringType())).alias("column_1")
)
crash.withColumn("column_2",
split(col("column_2"), ",\s*").cast(ArrayType(StringType())).alias("column_2")
)
现在我需要使用 '_' 将两列中的每个元素进行压缩。如何使用 zip 实现?非常感谢任何帮助。
df['column_1']
和df['column_2']
是单个字符串而不是项目列表?它们最初是什么? - Foxan Ngabc
,def
等是在同一行还是不同行?同样,第二列是单独一行吗? - anky