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

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,并且如果您需要多次分解,那么这就是代码和结果

【讨论】:

以上是关于根据分隔符拆分列,然后在保留其他列的情况下取消透视结果的主要内容,如果未能解决你的问题,请参考以下文章

将一列拆分为其他列的 SQL 命令

怎么用excel把一列变成两列

Pandas:通过分隔符拆分列并根据其他列重新排列

Hive - 在多行上拆分分隔列,根据位置选择

Excel如何把同一列的内容拆分为两列

如何使用 Python 使用管道分隔符拆分文本文件,然后根据条件选择列?