通过列值复制pandas数据框中的行

Mer*_*ime 24 python pandas

我想复制Pandas Dataframe中的行.每行应重复n次,其中n是每行的一个字段.

import pandas as pd

what_i_have = 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'],
  'v' : [ 10,  13,  13,   8,   8,   8]
})
Run Code Online (Sandbox Code Playgroud)

这可能吗?

DSM*_*DSM 33

您可以使用np.repeat获取重复索引,然后使用它索引到框架:

>>> df2 = df.loc[np.repeat(df.index.values,df.n)]
>>> df2
  id  n   v
0  A  1  10
1  B  2  13
1  B  2  13
2  C  3   8
2  C  3   8
2  C  3   8
Run Code Online (Sandbox Code Playgroud)

之后只有一点清理工作:

>>> df2 = df2.drop("n",axis=1).reset_index(drop=True)
>>> df2
  id   v
0  A  10
1  B  13
2  B  13
3  C   8
4  C   8
5  C   8
Run Code Online (Sandbox Code Playgroud)

请注意,如果您可能需要担心重复的索引,则可以使用.iloc:

In [86]: df.iloc[np.repeat(np.arange(len(df)), df["n"])].drop("n", axis=1).reset_index(drop=True)
Out[86]: 
  id   v
0  A  10
1  B  13
2  B  13
3  C   8
4  C   8
5  C   8
Run Code Online (Sandbox Code Playgroud)

它使用的是位置,而不是索引标签.

  • 对于较新的版本,可以是`df.loc [df.index.repeat(df.n)]` (3认同)