如何在PySpark中按对应关系拆分多列逗号分隔数据
多列关联拆分解决方案
针对你遇到的多列逗号分隔数据需要按对应位置拆分的问题,直接对单列拆分再explode会产生笛卡尔积,正确的做法是先将目标列转为列表,再同时对多列执行explode操作,确保对应位置的元素匹配:
步骤1:构造示例DataFrame(已有可跳过)
import pandas as pd df = pd.DataFrame({ 'col1': [1], 'col2': ['123, 124'], 'col3': ['Employer, Employer'], 'col4': ['EAGLE, ANIMAL'] })
步骤2:将目标列拆分转为列表
# 按", "分割字符串,转为列表格式 df[['col2', 'col3', 'col4']] = df[['col2', 'col3', 'col4']].apply(lambda x: x.str.split(', '))
步骤3:同时对多列执行explode
# 传入多个列名,一次性拆分并保持对应关系 df = df.explode(['col2', 'col3', 'col4'], ignore_index=True)
执行后得到的结果如下:
| col1 | col2 | col3 | col4 |
|---|---|---|---|
| 1 | 123 | Employer | EAGLE |
| 1 | 124 | Employer | ANIMAL |
备选方案:适用于旧版Pandas(低于1.3.0)
如果你的Pandas版本不支持多列explode,可以用逐行处理的方式:
df = df.apply( lambda row: pd.Series({ 'col1': row['col1'], 'col2': row['col2'].split(', '), 'col3': row['col3'].split(', '), 'col4': row['col4'].split(', ') }).explode(), axis=1 ).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者user1768029
相关产品推荐
相关产品推荐

