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

Pandas列表列处理:将连续数字替换为‘最小值-最大值’格式

处理Pandas列表列的连续数字合并

核心思路

先写一个处理单个列表的函数,把列表里的元素分成数字型和非数字型两类:

  • 对数字型元素,按数值排序后找出连续序列,把连续序列合并成"起始字符串-结束字符串"的格式
  • 非数字型元素直接保留
    最后把处理后的数字序列和非数字元素合并成新列表,再用apply把函数批量应用到DataFrame的列上。

代码实现

import pandas as pd

def merge_continuous_numbers(lst):
    # 分离数字项和非数字项
    num_items = []
    non_num_items = []
    for item in lst:
        try:
            # 尝试转换为整数,同时记录原字符串和对应数值
            num = int(item)
            num_items.append((num, item))
        except ValueError:
            non_num_items.append(item)
    
    # 按数值排序数字项
    num_items.sort(key=lambda x: x[0])
    merged_num_strings = []
    
    if num_items:
        # 初始化第一个连续组
        current_group = [num_items[0]]
        for num, item in num_items[1:]:
            # 检查当前数值和组内最后一个数值是否连续(差值为1)
            if num == current_group[-1][0] + 1:
                current_group.append((num, item))
            else:
                # 处理当前组:单元素保留原字符串,多元素拼接首尾
                if len(current_group) == 1:
                    merged_num_strings.append(current_group[0][1])
                else:
                    merged_num_strings.append(f"{current_group[0][1]}-{current_group[-1][1]}")
                current_group = [(num, item)]
        # 处理最后一个剩余组
        if len(current_group) == 1:
            merged_num_strings.append(current_group[0][1])
        else:
            merged_num_strings.append(f"{current_group[0][1]}-{current_group[-1][1]}")
    
    # 合并处理后的数字项和非数字项
    return merged_num_strings + non_num_items

# 测试用DataFrame
df = pd.DataFrame({
    'field1': [
        ['01', '02', '03', '04', 'Other'],
        ['-01', '00', '01', '06', '07', '08', '09'],
        ['01', '06', '07', '08', '09'],
        []
    ]
})

# 批量处理field1列
df['field1'] = df['field1'].apply(merge_continuous_numbers)
print(df)

代码说明

  1. 元素分离:通过try-except判断元素是否可转为整数,精准区分数字和非数字项
  2. 排序分组:数字项按数值排序后,遍历识别连续数值组(相邻数值差1即视为连续)
  3. 组合并规则:单元素组直接保留原字符串,多元素组用首尾原字符串拼接成范围格式
  4. 批量应用:用apply将处理函数批量作用于整个DataFrame列,完成转换

运行后输出结果与需求完全匹配:

0    ['01-04', 'Other']
1    ['-01-01', '06-09']
2       ['01', '06-09']
3                    []

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:28:24