根据分隔符拆分列,然后在保留其他列的情况下取消透视结果
Posted
技术标签:
【中文标题】根据分隔符拆分列,然后在保留其他列的情况下取消透视结果【英文标题】:split a column based on a delimiter and then unpivot the result with preserving other columns 【发布时间】:2021-06-29 00:54:54 【问题描述】:我需要将一列拆分为多行,然后通过保留一个/多列来取消它们,我如何在 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
是否有任何方法可以在不合并和重置索引的情况下实现这一点here?
【问题讨论】:
【参考方案1】:将列数据转换成列表并展开数据框
数据
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()
【讨论】:
谢谢,F 和 spark 是什么?我通过 pip 安装了 spark,但我收到 Module 'spark' has no attribute 'createDataFrame' 你试过社区版吗? community.cloud.databricks.com/login.html 或查看如何在 Jupiter 中设置 spark,有无数的视频和帖子 我正在使用服务器,我将安装 spark 作为最后一个解决方案,需要获得一些需要时间的批准。似乎不是很直接的过程 您不应该标记您的问题Pyspark
then。我将编辑标签并添加pandas
。如果是这种情况,请使用df=df.assign(data=df['data'].str.split(',')).apply(lambda x:x.explode())
感谢代码,我不打算使用 pyspark,很抱歉造成混乱,【参考方案2】:
使用 Explode 是搜索此内容的关键字(感谢 wwnde 指出),并且可以使用现有库在 Python 中轻松完成
第一步是将带有分隔符的列转换为列表
df=df.assign(Data=df.data.str.split(","))
然后爆炸
df.explode('Data')
如果您正在从 Excel 中读取数据,并且 Pandas 将数字列表检测为 int,并且如果您需要多次分解,那么这就是代码和结果
【讨论】:
以上是关于根据分隔符拆分列,然后在保留其他列的情况下取消透视结果的主要内容,如果未能解决你的问题,请参考以下文章