根据分隔符拆分列,然后在保留其他列的情况下取消对结果的透视

split a column based on a delimiter and then unpivot the result with preserving other columns

我需要将一列拆分为多行,然后通过保留 a/multiple 列来取消透视它们,如何在 Python3

中实现此目的

见下例

import numpy as np
data=np.array(['a0','a1,a2','a2,a3'])
pk=np.array([1,2,3])
df=pd.DataFrame({'data':data,'PK':pk})
df

df['data'].apply(lambda x : pd.Series(str(x).split(","))).stack()

我需要的是:

data  pk
 a0   1
 a1   2
 a2   2
 a2   3
 a3   3

有没有办法在不合并和重置索引的情况下实现这一目标

将列数据转换为列表并分解数据框

数据

data=np.array(['a0','a1,a2','a2,a3'])
pk=np.array([1,2,3])
df=pd.DataFrame({'data':data,'PK':pk})
df=spark.createDataFrame(df)

解决方案

df.withColumn('data', F.explode(F.split(col('data'),','))).show()

使用 Explode 是搜索这个的关键字(感谢 wwnde 指出它)并且可以在 Python 中使用现有库轻松完成

第一步是将带有分隔符的列转换为列表

df=df.assign(Data=df.data.str.split(","))

然后爆炸

df.explode('Data')

如果您从 Excel 和 Pandas 读取一个数字列表作为 int,如果您需要多次进行爆炸,那么这就是代码和结果