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

如何为DataFrame中每个gsm_id前后添加新行?

实现每个gsm_id分组首尾添加重复行的方案

这个需求用Pandas的分组功能结合自定义处理函数就能轻松搞定,我给你一步步拆解实现步骤:

1. 先准备示例数据(模拟你的场景)

首先咱们构造一个小型的DataFrame来模拟你的900多行、13列的数据集,方便你测试:

import pandas as pd

# 构造示例数据,gsm_id作为索引
data = {
    'gsm_id': ['GSM001', 'GSM001', 'GSM001', 'GSM002', 'GSM002'],
    'col1': [1, 2, 3, 4, 5],
    'col2': [10, 20, 30, 40, 50],
    # 这里可以继续添加到13列,示例只列2个
}
df = pd.DataFrame(data).set_index('gsm_id')

2. 定义分组处理函数

写一个函数,专门处理单个gsm_id对应的分组:

def add_top_bottom_rows(group):
    # 提取当前分组的首行,复制2次
    top_extra = pd.DataFrame([group.iloc[0]] * 2, columns=group.columns)
    # 提取当前分组的末行,复制2次
    bottom_extra = pd.DataFrame([group.iloc[-1]] * 2, columns=group.columns)
    # 按顺序拼接:顶部新增行 → 原分组 → 底部新增行
    return pd.concat([top_extra, group, bottom_extra], axis=0)

3. 应用到所有分组并合并结果

通过groupby按gsm_id分组,然后把自定义函数应用到每个分组,最后合并成最终的DataFrame:

# 按索引(gsm_id)分组处理
processed_df = df.groupby(level=0).apply(add_top_bottom_rows).reset_index(level=0, drop=True)

效果验证

处理后的processed_df中,每个gsm_id对应的原数据:

  • 首行上方会有2行和首行完全相同的记录
  • 末行下方会有2行和末行完全相同的记录
    完全符合你想要的红色高亮部分的效果。

如果你的原始DataFrame里有缺失值,这个方案也会保留缺失值的复制,完全适配你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:59:45