如何将pandas DataFrame的两个文本列同步分块并扩展对应行
双文本列同步拆分扩展Pandas DataFrame实现方案
核心实现逻辑如下:
- 对每行的两个文本列分别分词
- 计算当前行需要拆分的总份数:你给出的示例中可以按text列每200词为基准计算份数,也可以调整为取两列分别按各自阈值拆分所需的最大份数,保证每块长度符合要求
- 分别将两列的分词结果按总份数均匀分块
- 最后将分块结果展开为多行即可
完整实现代码如下:
import pandas as pd import math # 示例原始DataFrame,可替换为你的实际数据 df = pd.DataFrame({ 'text': [' '.join([f'text_{i}' for i in range(1000)]), ' '.join([f'text_{i}' for i in range(500)])], 'summary': [' '.join([f'sum_{i}' for i in range(200)]), ' '.join([f'sum_{i}' for i in range(120)])] }) # 配置参数:text列每块目标词数,summary列会按相同份数自动适配每块长度 text_chunk_target = 200 def split_single_row(row): # 对两列分别分词 text_words = row['text'].split() sum_words = row['summary'].split() # 计算总拆分份数(向上取整) chunk_total = math.ceil(len(text_words) / text_chunk_target) # 计算summary列每块的词数 sum_chunk_size = math.ceil(len(sum_words) / chunk_total) # 两列分别按对应大小分块 text_chunks = [' '.join(text_words[i*text_chunk_target : (i+1)*text_chunk_target]) for i in range(chunk_total)] sum_chunks = [' '.join(sum_words[i*sum_chunk_size : (i+1)*sum_chunk_size]) for i in range(chunk_total)] # 返回分块后的元组序列 return pd.Series(zip(text_chunks, sum_chunks)) # 执行拆分、展开 post_df = df.apply(split_single_row, axis=1).stack().reset_index(drop=True) # 拆分元组为独立列 post_df = pd.DataFrame(post_df.tolist(), columns=['text', 'summary'])
如果需要同时限制summary列的最大块长度,可以调整总份数的计算逻辑:
# 新增summary每块最大词数配置 sum_chunk_max = 50 chunk_total = max( math.ceil(len(text_words) / text_chunk_target), math.ceil(len(sum_words) / sum_chunk_max) )
调整后可以保证两列的每块长度都不会超过各自设定的阈值。
内容的提问来源于stack exchange,提问作者BlueMango
相关产品推荐
相关产品推荐

