如何在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
相关产品推荐
相关产品推荐

