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

如何为Pandas DataFrame绑定前后行数据(按文档句索引处理)

Pandas实现按文档分组的前后行数据绑定

嗨,我来帮你搞定这个数据处理需求!核心思路是按文档(doc)分组后,对目标列进行上下行偏移(shift)操作,同时处理好文档内首/末句的边界填充问题,具体步骤如下:

1. 先构造正确的输入DataFrame

你提供的基础创建代码和示例数据不符,先还原你需要的输入数据:

import pandas as pd

# 构造示例输入DataFrame
data = {
    'doc': [0, 0, 0, 1, 1],
    'sent': [0, 1, 2, 0, 1],
    'col1': [5, 6, 1, 6, 5],
    'col2': [4, 3, 2, 1, 1],
    'col3': [8, 2, 9, 6, 5]
}
df = pd.DataFrame(data)

2. 定义目标列并生成前后行数据

我们针对col1/col2/col3这三列,按doc分组后分别生成上一行(前缀p_)和下一行(前缀n_)的数据,空值用0填充:

# 指定需要处理的目标列
target_cols = ['col1', 'col2', 'col3']

# 生成上一行数据:每个文档内向下偏移1行,空值(文档首句)填0,并重命名列
prev_data = df.groupby('doc')[target_cols].shift(1).fillna(0).rename(columns=lambda x: f'p_{x}')

# 生成下一行数据:每个文档内向上偏移1行,空值(文档末句)填0,并重命名列
next_data = df.groupby('doc')[target_cols].shift(-1).fillna(0).rename(columns=lambda x: f'n_{x}')

3. 合并所有数据得到最终结果

把原DataFrame和前后行数据按列拼接:

result_df = pd.concat([df, prev_data, next_data], axis=1)

运行后你会得到符合预期的结果,如果需要把浮点型的0转成整数,可以加一步类型转换:

result_df[prev_data.columns.tolist() + next_data.columns.tolist()] = result_df[prev_data.columns.tolist() + next_data.columns.tolist()].astype(int)

最终输出就和你给出的示例完全一致了:

doc  sent  col1  col2  col3  p_col1  p_col2  p_col3  n_col1  n_col2  n_col3
0    0     0     5     4     8       0       0       0       6       3       2
1    0     1     6     3     2       5       4       8       1       2       9
2    0     2     1     2     9       6       3       2       6       1       6
3    1     0     6     1     6       0       0       0       5       1       5
4    1     1     5     1     5       6       1       6       0       0       0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:05:19