Pandas DataFrame每隔3行插入2个空行的实现方法
Pandas 每N行数据后插入M行空行实现方案
原始数据集
初始DataFrame构造代码:
import pandas as pd df = pd.DataFrame( columns=['a','b'], data=[[3,4],[5,5],[9,3],[1,2],[9,9],[6,5],[6,5],[6,5],[6,5], [6,5],[6,5],[6,5],[6,5],[6,5],[6,5],[6,5],[6,5]] )
实现逻辑
不用逐行循环插入,通过索引映射的方式批量处理,性能更高:
- 先给每一行原始数据计算它在最终结果里的索引位置,每累计3行有效数据,后续索引整体向后偏移2位(给2行空行留位置)
- 用新索引重构DataFrame后,对完整连续的索引范围做重索引,空缺位置会自动填充为NaN
- 最后重置索引为默认从0开始的连续整数即可
可直接运行的代码
import numpy as np # 规则配置:每3行有效数据,插入2行NaN空行 step_valid = 3 gap_null = 2 # 计算每行原始数据对应的新索引 row_count = len(df) new_index = np.arange(row_count) + (np.arange(row_count) // step_valid) * gap_null # 重索引生成结果,空缺位置自动填充NaN result = df.set_index(pd.Index(new_index)).reindex(np.arange(new_index.max() + 1)) # 重置为默认整数索引 result = result.reset_index(drop=True)
输出结果
运行代码后得到的result和预期完全一致:
a b 0 3.0 4.0 1 5.0 5.0 2 9.0 3.0 3 NaN NaN 4 NaN NaN 5 1.0 2.0 6 9.0 9.0 7 6.0 5.0 8 NaN NaN 9 NaN NaN 10 6.0 5.0 11 6.0 5.0 12 6.0 5.0 13 NaN NaN 14 NaN NaN 15 6.0 5.0 16 6.0 5.0 17 6.0 5.0 18 NaN NaN 19 NaN NaN 20 6.0 5.0 21 6.0 5.0 22 6.0 5.0 23 NaN NaN 24 NaN NaN 25 6.0 5.0 26 6.0 5.0
如果需要调整插入规则,直接修改
step_valid和gap_null两个参数即可适配其他场景。
内容的提问来源于stack exchange,提问作者Martin Yordanov Georgiev
相关产品推荐
相关产品推荐

