You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pandas DataFrame中按分隔符拆分多列并转为行

解决Pandas同时拆分并展开多列的问题

我来帮你搞定这个需求!你想要把pos和value这两个用斜杠分隔的列按位置对应拆分展开,让每一组对应的值都成为单独的行。之前的方法失效,大概率是因为拆分后没保证两列元素的一一对应,或者索引处理出现了偏差。下面给你两种可靠的解决方案:

方法一:使用Pandas 1.3.0+的多列explode(推荐)

如果你的Pandas版本在1.3.0及以上,可以直接同时对两个列执行explode操作,这是最简洁高效的方式:

import pandas as pd

# 构造原始DataFrame
data = {
    'id': [1, 2],
    'pos': ['a/b/c', 'd/a'],
    'value': ['test/test2/test3', 'test/test5'],
    'sent': [21, 21]
}
df = pd.DataFrame(data)

# 先将pos和value列拆分为列表
df['pos'] = df['pos'].str.split('/')
df['value'] = df['value'].str.split('/')

# 同时爆炸两个列,确保对应位置的元素匹配
df_exploded = df.explode(['pos', 'value']).reset_index(drop=True)

print(df_exploded)

运行后你会得到想要的结果:

id pos  value  sent
0   1   a   test    21
1   1   b  test2    21
2   1   c  test3    21
3   2   d   test    21
4   2   a  test5    21

方法二:兼容低版本Pandas的自定义行展开

如果你的Pandas版本低于1.3.0,不支持多列explode,可以通过自定义函数逐行处理:

import pandas as pd

data = {
    'id': [1, 2],
    'pos': ['a/b/c', 'd/a'],
    'value': ['test/test2/test3', 'test/test5'],
    'sent': [21, 21]
}
df = pd.DataFrame(data)

# 定义函数,将单行拆分为多行
def expand_row(row):
    pos_items = row['pos'].split('/')
    value_items = row['value'].split('/')
    # 确保两个列表长度一致(根据你的数据,这里应该是匹配的)
    return pd.DataFrame({
        'id': [row['id']] * len(pos_items),
        'pos': pos_items,
        'value': value_items,
        'sent': [row['sent']] * len(pos_items)
    })

# 对每一行应用函数,然后合并结果
df_exploded = pd.concat([expand_row(row) for _, row in df.iterrows()], ignore_index=True)

print(df_exploded)

这个方法会逐行拆分并生成小DataFrame,最后合并成最终结果,同样能达到你的要求。


内容的提问来源于stack exchange,提问作者Mi.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:26:18