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

按分隔符拆分DataFrame列并生成两两组合的新行

问题

现有如下Pandas DataFrame,需要将path列按>分隔符拆分,生成相邻两个元素组合的新行(比如SPAM>EGGS>BACON>HAM要拆成SPAM>EGGS、EGGS>BACON、BACON>HAM),预期结果如下。目前用split+explode只能拆成单个元素,无法实现两两分组的效果。

示例DataFrame代码

import pandas as pd

df = pd.DataFrame({
    'path': ['SPAM>EGGS>BACON>HAM', 'SPAM>EGGS>HAM', 'SPAM>EGGS>HAM', 'SPAM>HAM'],
    'arrival_time': ['2/4/23 20:30', '2/5/23 2:24', '2/5/23 0:28', '2/3/23 0:28'],
    'departure_time': ['2/4/23 22:00', '2/5/23 2:54', '2/5/23 1:28', '2/3/23 1:28']
})

预期结果

path  arrival_time departure_time
0   SPAM>EGGS  2/4/23 20:30   2/4/23 22:00
1  EGGS>BACON  2/4/23 20:30   2/4/23 22:00
2   BACON>HAM  2/4/23 20:30   2/4/23 22:00
3   SPAM>EGGS   2/5/23 2:24    2/5/23 2:54
4    EGGS>HAM   2/5/23 2:24    2/5/23 2:54
5   SPAM>EGGS   2/5/23 0:28    2/5/23 1:28
6    EGGS>HAM   2/5/23 0:28    2/5/23 1:28
7    SPAM>HAM   2/3/23 0:28    2/3/23 1:28

当前尝试的代码(无效)

df['path'] = df['path'].str.split(pat='>').explode('path')
解决方案

要实现相邻元素两两组合的拆分,可以按以下方式处理:

import pandas as pd

df = pd.DataFrame({
    'path': ['SPAM>EGGS>BACON>HAM', 'SPAM>EGGS>HAM', 'SPAM>EGGS>HAM', 'SPAM>HAM'],
    'arrival_time': ['2/4/23 20:30', '2/5/23 2:24', '2/5/23 0:28', '2/3/23 0:28'],
    'departure_time': ['2/4/23 22:00', '2/5/23 2:54', '2/5/23 1:28', '2/3/23 1:28']
})

# 拆分path为元素列表,生成相邻元素的组合
df['path'] = df['path'].str.split('>').apply(
    lambda lst: [f"{lst[i]}>{lst[i+1]}" for i in range(len(lst)-1)]
)

# 展开组合并重置索引
result = df.explode('path').reset_index(drop=True)

print(result)

关键步骤说明

  • 生成相邻组合:先用str.split('>')将每个path字符串拆分为元素列表,再通过apply遍历列表,循环取相邻两个元素拼接成X>Y格式的字符串,组成新列表;
  • 拆分新行:explode('path')会把列表中的每个组合拆分为独立行,同时保留arrival_time和departure_time的对应值;
  • 重置索引:reset_index(drop=True)让结果的索引连续,与预期格式一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:33:19