如何在Pandas DataFrame中为含REL的行后添加分隔行?
在Pandas DataFrame中为含"REL"的行后添加空分隔行
需求说明
需要在Pandas DataFrame里,给action列包含"REL"关键字的每一行之后,添加一行全空(值为NaN)的分隔行。
原始代码
import pandas as pd data = [ [1,'ACQ','A'], [2,'REL','A'], [3,'ACQ','B'], [4,'REL','B'], [5,'ACQ','C'], [6,'REL','C'], [7,'ACQ','A'], [8,'REL','A'] ] df = pd.DataFrame(data,columns=['x','action','name']) print(df)
解决方案代码
import pandas as pd data = [ [1,'ACQ','A'], [2,'REL','A'], [3,'ACQ','B'], [4,'REL','B'], [5,'ACQ','C'], [6,'REL','C'], [7,'ACQ','A'], [8,'REL','A'] ] df = pd.DataFrame(data,columns=['x','action','name']) # 定位所有action为"REL"的行索引 rel_row_indices = df[df['action'] == 'REL'].index # 计算需要插入空行的位置(REL行的下一行) insert_locations = [idx + 1 for idx in rel_row_indices] # 从后往前插入空行,避免索引偏移导致位置错误 for loc in reversed(insert_locations): # 创建一行全空的DataFrame,列名与原表一致 empty_row = pd.DataFrame([[pd.NA]*len(df.columns)], columns=df.columns) # 拼接原表前半部分、空行、原表后半部分 df = pd.concat([df.iloc[:loc], empty_row, df.iloc[loc:]], ignore_index=True) print(df)
代码说明
- 定位目标行:通过布尔索引筛选出
action列等于"REL"的所有行,获取它们的索引。 - 确定插入位置:每个REL行的下一行就是要插入空行的位置,给每个REL行索引加1得到插入点。
- 反向插入:如果从前往后插入空行,会导致后续插入位置偏移(表长度增加后索引会变化),用
reversed()从后往前处理,保证每个插入位置始终准确。 - 创建空行:生成一行全为
pd.NA的行,确保列名和原DataFrame一致,避免拼接时出现列不匹配的问题。
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

