comment ajouter plusieurs lignes dans une position spécifiée avec modification en python?

Aug 31 2020

J'ai un bloc de données dans lequel je veux répliquer et des lignes de la manière suivante

 d=pd.DataFrame({"col1":["a","b","c","d"],
                "col2":[12,13,14,16]})

sortie requise: souhaitez copier les lignes 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

Réponses

3 anky Aug 31 2020 at 16:20

IIUC, vous pouvez essayer index.repeatavecgroupby+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)

print(out)

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

ÉDITER:

Pour répéter les valeurs de col1plus tard, vous pouvez utiliser une série d'assistance comme groupeur:

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