Python 在Dataframe列中取消嵌套数据拆分
我有一个数据框,有4列,第一列是键,第四列是值。但有时键可以有一个变量,在这种情况下,第一列为空,键及其变量分别存储在第二列和第三列中 如何转换数据帧,使其只有两列:键和值 比如说,我正在为我的用户构建一个居住数据框架,我收到了下表:Python 在Dataframe列中取消嵌套数据拆分,python,pyspark,Python,Pyspark,我有一个数据框,有4列,第一列是键,第四列是值。但有时键可以有一个变量,在这种情况下,第一列为空,键及其变量分别存储在第二列和第三列中 如何转换数据帧,使其只有两列:键和值 比如说,我正在为我的用户构建一个居住数据框架,我收到了下表: 从pyspark.sql导入行 l=[(“乔”、“伦敦”、“伦敦”), (“爱丽丝”、“鲍勃”、“巴黎”), (“莎拉”,“纽约”), (“约翰”、“埃德蒙”、“柏林”)] rdd=sc.并行化(l) people=rdd.map(lambda x:Row(sin
从pyspark.sql导入行
l=[(“乔”、“伦敦”、“伦敦”),
(“爱丽丝”、“鲍勃”、“巴黎”),
(“莎拉”,“纽约”),
(“约翰”、“埃德蒙”、“柏林”)]
rdd=sc.并行化(l)
people=rdd.map(lambda x:Row(single=x[0],partner1=x[1],partner2=x[2],town=x[3]))
schemaPeople=sqlContext.createDataFrame(人)
schemaPeople.show()
+--------+--------+------+--------+
|合伙人1 |合伙人2 |单身|城镇|
+--------+--------+------+--------+
|| |乔|伦敦|
|爱丽丝|鲍勃|巴黎|
|| |莎拉|纽约|
|约翰·埃德蒙·柏林|
+--------+--------+------+--------+
如何将其转换为:
+--------+--------+
| name | town |
+--------+--------+
| Joe | London |
| Alice | Paris |
| Bob | Paris |
| Sarah |New-York|
| John | Berlin |
| Edmund | Berlin |
+--------+--------+
我可以想出一种方法,使用
concat\uws
将人员连接起来,然后split
it。然后分解
结果以获得表格
schpeep = schemaPeople. \
select('town', func.split(func.concat_ws('|', 'partner1', 'partner2', 'single'), '\|').alias('people')). \
withColumn('name', func.explode('people')). \
drop('people'). \
filter(func.col('name') != '')
schpeeps.show()
+--------+------+
| town| name|
+--------+------+
| London| Joe|
| Paris| Alice|
| Paris| Bob|
|New-York| Sarah|
| Berlin| John|
| Berlin|Edmund|
+--------+------+
我可以想出一种方法,使用
concat\uws
将人员连接起来,然后split
it。然后分解
结果以获得表格
schpeep = schemaPeople. \
select('town', func.split(func.concat_ws('|', 'partner1', 'partner2', 'single'), '\|').alias('people')). \
withColumn('name', func.explode('people')). \
drop('people'). \
filter(func.col('name') != '')
schpeeps.show()
+--------+------+
| town| name|
+--------+------+
| London| Joe|
| Paris| Alice|
| Paris| Bob|
|New-York| Sarah|
| Berlin| John|
| Berlin|Edmund|
+--------+------+
您只需执行
union
s即可
df.select(
F.col(“合伙人1”)。别名(“名称”),
F.col(“城镇”)
)。其中(“名称”)\
.工会(
选择(
F.col(“合伙人2”)。别名(“名称”),
F.col(“城镇”)
)。其中(“名称”)
)\
.工会(
选择(
F.col(“单一”)。别名(“名称”),
F.col(“城镇”)
)。其中(“名称”)
)
您只需执行union
s
df.select(
F.col(“合伙人1”)。别名(“名称”),
F.col(“城镇”)
)。其中(“名称”)\
.工会(
选择(
F.col(“合伙人2”)。别名(“名称”),
F.col(“城镇”)
)。其中(“名称”)
)\
.工会(
选择(
F.col(“单一”)。别名(“名称”),
F.col(“城镇”)
)。其中(“名称”)
)
太棒了!我接受你的回答,因为前几天你花时间帮助我!非常感谢:)太好了!我接受你的回答,因为前几天你花时间帮助我!非常感谢:)很好的回答,谢谢,我发现史蒂文的更容易理解。很好的回答,谢谢,我发现史蒂文的更容易理解。