首页 > 解决方案 > 尝试复制 Pandas DataFrame 行 X 次,但因列值而异

问题描述

df

    Name Run ID1 ID2
0    A   18  100 500
1    B   19  150 550
2    C   18  200 600
3    D   15  250 650

然后我有一个名为max_runs = 20的变量 我想做的是将数据转换为下面的这种格式。基本上复制每个唯一行 max_runs - df['Run'] 次

df_output

     Name Run ID1 ID2
1     A   19  100 500
2     A   20  100 500
3     B   20  150 550
4     C   19  200 600
5     C   20  200 600
6     D   16  250 650
7     D   17  250 650
8     D   18  250 650
9     D   19  250 650
10    D   20  250 650

感谢您的帮助,如果我需要进一步解释,请告诉我

标签: pythonpython-3.xpandas

解决方案


您可以使用repeat重复行并assign修改新运行:

(df.loc[df.index.repeat(20-df.Run)]
   .assign(Run=lambda x: x.groupby(level=0).cumcount().add(x.Run+1))
   .reset_index()
)

输出:

   index Name  Run  ID1  ID2
0      0    A   19  100  500
1      0    A   20  100  500
2      1    B   20  150  550
3      2    C   19  200  600
4      2    C   20  200  600
5      3    D   16  250  650
6      3    D   17  250  650
7      3    D   18  250  650
8      3    D   19  250  650
9      3    D   20  250  650

推荐阅读