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

如何基于结构分割Pandas DataFrame并为数据集添加标识

解决方案

核心思路

要实现带标识的数据集映射,需结合resumeCol中的字符串列位置信息,将分割后的数值列范围与对应标识(从Excel表头或指定位置提取)关联。核心步骤:

  1. 分割数值列的连续区间
  2. 匹配每个区间对应的字符串标识(从DataFrame中提取)
  3. 生成{标识: 列索引列表}的映射

优化后的实现代码

def get_labeled_datasets(self, df, resumeCol):
    number_cols = resumeCol['number']
    if not number_cols:
        return {}

    # 分割数值列的连续块
    blocks = []
    current_start = number_cols[0]
    for i in range(1, len(number_cols)):
        if number_cols[i] != number_cols[i-1] + 1:
            blocks.append([current_start, number_cols[i-1]])
            current_start = number_cols[i]
    blocks.append([current_start, number_cols[-1]])

    string_cols = sorted(resumeCol['string'])
    labeled_blocks = {}

    # 处理第一个数值块
    first_start, first_end = blocks[0]
    # 找第一个块之前的最近字符串列
    prev_str_cols = [col for col in string_cols if col < first_start]
    if prev_str_cols:
        label_col = max(prev_str_cols)
        label = str(df.iloc[0, label_col])  # 取行0(表头)的内容作为标识
    else:
        # 无前置字符串列时,用第一个数值列的表头作为标识
        label = str(df.iloc[0, first_start])
    labeled_blocks[label] = list(range(first_start, first_end + 1))

    # 处理后续数值块
    for idx in range(1, len(blocks)):
        prev_block_end = blocks[idx-1][1]
        curr_start, curr_end = blocks[idx]
        # 找两个块之间的字符串列
        middle_str_cols = [col for col in string_cols if prev_block_end < col < curr_start]
        if middle_str_cols:
            label_col = middle_str_cols[0]
            label = str(df.iloc[0, label_col])
        else:
            # 无中间字符串列时,使用默认命名
            label = f"Sample {idx + 1}"
        labeled_blocks[label] = list(range(curr_start, curr_end + 1))

    return labeled_blocks

使用示例

假设已通过pandas读取Excel数据到df,直接调用函数即可生成目标映射:

import pandas as pd

# 读取Excel文件
df = pd.read_excel("your_data.xlsx")
# 生成带标识的数据集映射
result = self.get_labeled_datasets(df, resumeCol)
print(result)
# 输出示例: {'Sample A': [1,2,...,16], 'Sample B': [20,...,37]}

可调整项

  • 若标识不在表头(行0),修改df.iloc[0, label_col]中的行索引即可
  • 若字符串列的匹配逻辑需要调整(比如取后续字符串列),修改字符串列的筛选条件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:47:31