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

如何在Pandas中将含配对元素列表的列拆分为两列?

拆分Pandas DataFrame中的列表列为start和end列

原始数据

import pandas as pd

data = {
    'ID': ['ld1', 'ld2', 'ld3', 'ld5', 'ld28', 'ld37'],
    'li': [
        ['1205369-1205491', '1206384-1206570'],
        ['111-112','113-114','117-119'],
        ['444-445','765-785','777-779'],
        ['1203843-1203967', '1204033-1204235', '1204398-1204485'],
        ['666-777','756-788','896-909'],
        ['999-1000','1001-1111','1112-1119','1234-1278','1999-2007']
    ]
}
df = pd.DataFrame(data)

解决方案

通过apply结合列表推导式可以快速拆分并生成目标列:

# 提取每个区间的起始值,用逗号连接成字符串
df['start'] = df['li'].apply(lambda x: ','.join([interval.split('-')[0] for interval in x]))
# 提取每个区间的结束值,用逗号连接成字符串
df['end'] = df['li'].apply(lambda x: ','.join([interval.split('-')[1] for interval in x]))
# 删除原列表列(可选操作)
df = df.drop('li', axis=1)

运行结果

ID                     start                       end
0    ld1           1205369,1206384           1205491,1206570
1    ld2               111,113,117               112,114,119
2    ld3               444,765,777               445,785,779
3    ld5  1203843,1204033,1204398  1203967,1204235,1204485
4   ld28               666,756,896               777,788,909
5   ld37  999,1001,1112,1234,1999  1000,1111,1119,1278,2007

结构化代码版本(可选)

如果需要更清晰的代码逻辑,可以定义单独的处理函数:

def process_intervals(interval_list):
    starts = []
    ends = []
    for interval in interval_list:
        s, e = interval.split('-')
        starts.append(s)
        ends.append(e)
    return ','.join(starts), ','.join(ends)

df[['start', 'end']] = df['li'].apply(lambda x: pd.Series(process_intervals(x)))
df = df.drop('li', axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:19:01