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

如何按指定条件合并Pandas DataFrame同文档行至最大长度

Pandas按文档分组合并字符串(控制最大长度)

原始数据

DocString
Aabc
Adef
Aghi
Bjkl
Bmnop
Bqrst
Buv

合并规则

  • 仅合并同一Doc下的字符串
  • 合并后的单条字符串长度不能超过指定的max_len(示例取max_len=6)

预期输出

DocString
Aabcdef
Adefghi
Bjkl
Bmnop
Bqrstuv

实现代码

import pandas as pd

def batch_merge(group, max_len):
    batches = []
    current_batch = ""
    for s in group["String"]:
        # 如果加上当前字符串会超限,先把现有批次存起来
        if len(current_batch + s) > max_len:
            if current_batch:
                batches.append(current_batch)
            # 单个字符串超长的情况直接保留(按需调整)
            if len(s) > max_len:
                batches.append(s)
            current_batch = s
        else:
            current_batch += s
    # 收尾最后一个批次
    if current_batch:
        batches.append(current_batch)
    # 返回当前文档对应的结果DataFrame
    return pd.DataFrame({
        "Doc": [group.name] * len(batches),
        "String": batches
    })

# 构造原始DataFrame
df = pd.DataFrame({
    "Doc": ["A", "A", "A", "B", "B", "B", "B"],
    "String": ["abc", "def", "ghi", "jkl", "mnop", "qrst", "uv"]
})

# 设置最大长度阈值
max_len = 6

# 分组处理后拼接结果
final_df = df.groupby("Doc").apply(batch_merge, max_len=max_len).reset_index(drop=True)
print(final_df)

逻辑说明

  • 针对每个Doc分组,逐个遍历字符串,累加拼接成“批次”
  • 当当前批次加上下一个字符串会超过max_len时,先保存现有批次,再开启新批次
  • 最后把剩余的批次补上,保证所有字符串都被处理
  • 单个字符串本身超过max_len的情况,这里直接保留原字符串,可根据实际需求调整(比如截断)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:21:35