根据分隔符拆分列,然后在保留其他列的情况下取消对结果的透视
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,如果您需要多次进行爆炸,那么这就是代码和结果
我需要将一列拆分为多行,然后通过保留 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,如果您需要多次进行爆炸,那么这就是代码和结果