如何在python中修改后在指定位置添加多行?

如何在python中修改后在指定位置添加多行?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个数据帧,我想在其中按以下方式复制行和行 d=pd.DataFrame({"col1":["a","b","c","d"], "col2":[12,13,14,16]}) 所需输出: 要复制行a1、a2、b1、b2吗 col1 col2 a 12 a1 12 a2 12 b 12 b1 1

我有一个数据帧,我想在其中按以下方式复制行和行

 d=pd.DataFrame({"col1":["a","b","c","d"],
                "col2":[12,13,14,16]})
所需输出: 要复制行a1、a2、b1、b2吗

col1  col2
a      12
a1     12 
a2     12
b      12
b1     12  
b2     12
c      12 
c1     12
c2     12
d      12 
d1     12
d2     12

IIUC,您可以尝试
索引。使用
groupby+cumcount重复

n = 3
out = d.loc[d.index.repeat(n)]
out = out.assign(col1=out['col1']+out.groupby("col1").cumcount()
                  .replace(0,'').astype(str)).reset_index(drop=True)

编辑:

对于以后重复的
col1
值,可以使用助手系列作为grouper:

d=pd.DataFrame({"col1":["a","b","a","d"],"col2":[12,13,14,16],
                 "col3":[1,2,3,4]})
n = 3
out = d.loc[d.index.repeat(n)]
out = (out.assign(col1=out['col1']+out.groupby(out['col1'].ne(out['col1'].shift())
                               .cumsum()).cumcount().replace(0,'').astype(str))
           .reset_index(drop=True))
print(out)

   col1  col2  col3
0     a    12     1
1    a1    12     1
2    a2    12     1
3     b    13     2
4    b1    13     2
5    b2    13     2
6     a    14     3
7    a1    14     3
8    a2    14     3
9     d    16     4
10   d1    16     4
11   d2    16     4
d=pd.DataFrame({"col1":["a","b","a","d"],"col2":[12,13,14,16],
                 "col3":[1,2,3,4]})
n = 3
out = d.loc[d.index.repeat(n)]
out = (out.assign(col1=out['col1']+out.groupby(out['col1'].ne(out['col1'].shift())
                               .cumsum()).cumcount().replace(0,'').astype(str))
           .reset_index(drop=True))
print(out)

   col1  col2  col3
0     a    12     1
1    a1    12     1
2    a2    12     1
3     b    13     2
4    b1    13     2
5    b2    13     2
6     a    14     3
7    a1    14     3
8    a2    14     3
9     d    16     4
10   d1    16     4
11   d2    16     4