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

如何从Pandas DataFrame的Break列提取首尾为4的子组并修复代码问题

问题根源
  • 重复输出问题:你在每一行循环的末尾都执行了groups.append(new_group),不管当前子组有没有构建完成,所以子组有多少个元素就会重复追加多少次。
  • 缺失末尾4的问题:遇到值为4的行时,你直接清空了正在构建的子组,没有先把当前4追加到前一个未完成的子组里,也没有把构建完成的子组存入结果列表。
  • 额外隐患:原代码用了全局变量groups和可变默认参数new_group = [],属于Python常见的逻辑坑,会导致多次调用函数时结果异常。
修正后代码
def extract_phrases_between_four(data):
    groups = []
    current_group = []
    for _, row in data.iterrows():
        # 若实际列名是Break_Level_Annotation,替换下面的'Break'即可
        break_val = row['Break']
        if break_val == 4: 
            # 已有未完成的组,说明当前4是组的结尾
            if len(current_group) > 0:
                current_group.append(break_val)
                groups.append(current_group.copy())
            # 以当前4作为新组的开头,满足前后组共用4的要求
            current_group = [break_val]
        else:
            # 非4的元素直接追加到当前组
            current_group.append(break_val)
    return groups

备注:如果你的Break列值是字符串类型,把判断条件里的4改成'4'即可。

运行结果

用你提供的样例数据调用该函数,返回结果为:
[[4, 1, 2, 2, 1, 4], [4, 3, 2, 1, 4], [4, 1, 1, 1, 2, 4]]
和预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:30:01