如何在Pandas中复制指定索引的单行并插入到下一位?
复制DataFrame指定索引行并插入到下一行的简洁方法
需求说明
需要复制DataFrame中索引为x的单行,原样插入到索引x+1的位置。例如:
原数据框df:
a b 0 3 8 1 2 4 2 9 0 3 5 1
复制索引2的行后插入到下一行,期望结果:
a b 0 3 8 1 2 4 2 9 0 3 9 0 # new row 4 5 1
问题分析
你之前尝试用concat但效果混乱,核心原因是手动构造了列名不匹配的新DataFrame(date、event),和原数据框的列(a、b)不一致,导致拼接后结构混乱。
简洁解决方案
直接提取目标行并保持原列结构,再通过concat拼接即可:
import pandas as pd # 示例数据 df = pd.DataFrame({'a': [3, 2, 9, 5], 'b': [8, 4, 0, 1]}) x = 2 # 要复制的行索引 # 提取目标行(双层方括号保持DataFrame格式,避免维度错误) copied_row = df.iloc[[x]] # 拼接三部分:原数据前x+1行、复制的行、原数据剩余行 new_df = pd.concat([df.iloc[:x+1], copied_row, df.iloc[x+1:]]).reset_index(drop=True) print(new_df)
如果你的索引是标签索引(而非默认的位置索引),则把iloc换成loc即可:
copied_row = df.loc[[x]] new_df = pd.concat([df.loc[:x], copied_row, df.loc[x+1:]]).reset_index(drop=True)
关键说明
- 用
df.iloc[[x]](双层方括号)获取行,返回的是DataFrame对象,和原数据结构完全一致,拼接时不会出错;如果用单层方括号df.iloc[x]会返回Series,需要额外处理格式。 - 最后调用
reset_index(drop=True)是为了重置索引,避免出现重复索引的情况。
内容的提问来源于stack exchange,提问作者gotiredofcoding
相关产品推荐
相关产品推荐

