如何为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
相关产品推荐
相关产品推荐

