Python Pandas:如何按DataFrame指定列数值复制行并修改该列值为对应范围
实现方法
你已经通过df.loc[df.index.repeat(df['Table'])]完成了行复制,仅需额外对Table列生成对应连续序号即可,完整实现代码如下:
import pandas as pd # 你现有的重复行逻辑 expanded_df = df.loc[df.index.repeat(df['Table'])].copy() # 按原始索引分组生成1到原数值的连续序列 expanded_df['Table'] = expanded_df.groupby(level=0).cumcount() + 1 # 可选:重置索引去掉重复的原始索引 expanded_df.reset_index(drop=True, inplace=True)
代码说明
- 重复行操作会保留原始DataFrame的索引,相同原始行拓展出来的多条数据会共用同一个原始索引
groupby(level=0)表示按最外层的索引(也就是原始索引)分组,cumcount()会给每个分组内的行生成从0开始的递增序号,加1后就得到你需要的1到原Table值的连续整数
如果数据量较大,也可以用直接拼接序列的方式规避groupby,性能更高:
import numpy as np expanded_df = df.loc[df.index.repeat(df['Table'])].copy() expanded_df['Table'] = np.concatenate([range(1, n+1) for n in df['Table']]) expanded_df.reset_index(drop=True, inplace=True)
运行上述任意一段代码,得到的expanded_df就是你需要的结果:
| Store | Aisle | Table |
|---|---|---|
| 11 | 59 | 1 |
| 11 | 59 | 2 |
| 11 | 61 | 1 |
| 11 | 61 | 2 |
| 11 | 61 | 3 |
内容的提问来源于stack exchange,提问作者user12345
相关产品推荐
相关产品推荐

