按列值复制pandas数据帧中的行,并添加带有重复索引的新列

kam*_*pta 6 python dataframe pandas

我的问题类似于这里提出的问题.我有一个数据帧,我想重复数据帧的每一行k.伴随着它,我也想创建一个值的列0k-1.所以

import pandas as pd

df = pd.DataFrame(data={
  'id': ['A', 'B', 'C'],
  'n' : [  1,   2,   3],
  'v' : [ 10,  13,   8]
})

what_i_want = pd.DataFrame(data={
  'id': ['A', 'B', 'B', 'C', 'C', 'C'],
  'n' : [ 1, 2, 2, 3, 3, 3],
  'v' : [ 10,  13, 13, 8, 8, 8],
  'repeat_id': [0, 0, 1, 0, 1, 2]
})
Run Code Online (Sandbox Code Playgroud)

下面的命令完成了一半的工作.我正在寻找添加该repeat_id列的pandas方式.

df.loc[df.index.repeat(df.n)]
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 4

使用GroupBy.cumcountcopy避免SettingWithCopyWarning

如果稍后修改值,df1您会发现修改不会传播回原始数据 ( df),并且 Pandas 会发出警告。

df1 = df.loc[df.index.repeat(df.n)].copy()
df1['repeat_id'] = df1.groupby(level=0).cumcount()
df1 = df1.reset_index(drop=True)
print (df1)
  id  n   v  repeat_id
0  A  1  10          0
1  B  2  13          0
2  B  2  13          1
3  C  3   8          0
4  C  3   8          1
5  C  3   8          2
Run Code Online (Sandbox Code Playgroud)