如何在保持原始行顺序的前提下重复Pandas DataFrame的行n次
问题描述
我有一个Pandas DataFrame,示例如下:
| Column A | Column B |
|---|---|
| A | 1 |
| B | 2 |
| C | 3 |
我希望重复每一行,同时保持原始行的顺序,预期结果如下:
| Column A | Column B |
|---|---|
| A | 1 |
| B | 2 |
| C | 3 |
| A | 1 |
| B | 2 |
| C | 3 |
尝试使用index.repeat方法,但得到的是行排序后的结果:
| Column A | Column B |
|---|---|
| A | 1 |
| A | 1 |
| B | 2 |
| B | 2 |
| C | 3 |
| C | 3 |
请问如何实现预期的行重复效果?
解决方案
方法1:直接拼接原DataFrame
最直观的方式是将原DataFrame和自身拼接,自然保持原始顺序:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({'Column A': ['A', 'B', 'C'], 'Column B': [1, 2, 3]}) # 重复2次(可根据需求调整拼接次数) result = pd.concat([df, df], ignore_index=True)
方法2:修复index.repeat的排序问题
如果一定要用index.repeat,可以在重复后通过稳定排序还原原始顺序:
# 重复每行2次 repeated_df = df.loc[df.index.repeat(2)] # 用归并排序(稳定排序)按原始索引重新排列 result = repeated_df.sort_index(kind='mergesort')
方法3:用numpy.tile生成重复索引
借助numpy的tile函数生成按原始顺序重复的索引序列,再提取行:
import pandas as pd import numpy as np df = pd.DataFrame({'Column A': ['A', 'B', 'C'], 'Column B': [1, 2, 3]}) # 生成重复2次的索引数组 repeated_indices = np.tile(df.index, 2) result = df.loc[repeated_indices].reset_index(drop=True)
内容的提问来源于stack exchange,提问作者bunnybunny
相关产品推荐
相关产品推荐

