根据编号和组ID展开数据帧行(Python 3)。

根据编号和组ID展开数据帧行(Python 3)。,python,python-3.x,pandas,numpy,data-munging,Python,Python 3.x,Pandas,Numpy,Data Munging,我一直在努力寻找一种方法,根据预先确定的数字和分组变量(id)来扩展/克隆观察行。对于上下文,这里是一个使用pandas和numpy(python3)的示例数据帧 我想根据“num”变量中给定的数字,根据行的ID组展开/克隆行。在本例中,我希望id=1有15行,id=2有20行。这可能是一个简单的问题,但我正在努力使这项工作。我一直在摆弄reindex和np.repeat,但这些概念性的片段对我来说并不合适 在R中,我使用了splitstackshape包中的expandRows函数,该函数如下

我一直在努力寻找一种方法,根据预先确定的数字和分组变量(id)来扩展/克隆观察行。对于上下文,这里是一个使用pandas和numpy(python3)的示例数据帧

我想根据“num”变量中给定的数字,根据行的ID组展开/克隆行。在本例中,我希望id=1有15行,id=2有20行。这可能是一个简单的问题,但我正在努力使这项工作。我一直在摆弄reindex和np.repeat,但这些概念性的片段对我来说并不合适

在R中,我使用了splitstackshape包中的expandRows函数,该函数如下所示:

library(splitstackshape)

df <- data.frame(id = c(1, 2), num = c(15, 20))


df
  id num
1  1  15
2  2  20


df2 <- expandRows(df, "num", drop = FALSE)
df2
     id num
1     1  15
1.1   1  15
1.2   1  15
1.3   1  15
1.4   1  15
1.5   1  15
1.6   1  15
1.7   1  15
1.8   1  15
1.9   1  15
1.10  1  15
1.11  1  15
1.12  1  15
1.13  1  15
1.14  1  15
2     2  20
2.1   2  20
2.2   2  20
2.3   2  20
2.4   2  20
2.5   2  20
2.6   2  20
2.7   2  20
2.8   2  20
2.9   2  20
2.10  2  20
2.11  2  20
2.12  2  20
2.13  2  20
2.14  2  20
2.15  2  20
2.16  2  20
2.17  2  20
2.18  2  20
2.19  2  20
库(splitstackshape)

df我不能复制您的索引,但我可以使用
np复制您的值。事实上,重复
,非常容易

v = df.values
df = pd.DataFrame(v.repeat(v[:, -1], axis=0), columns=df.columns)

如果您想要精确的索引(尽管我不明白为什么需要),您需要一个
groupby
操作-

def f(x):
    return x.astype(str) + '.' + np.arange(len(x)).astype(str)

idx = df.groupby('id').id.apply(f).values
idx
分配给
df
的索引-

df.index = idx

这不是一个愚蠢的问题。索引重要吗?或者一个数字索引可以吗?我会处理你的评论和解决方案:1)评论:在这种情况下,准确的索引号并不重要。我应该反应更快,这样你就不必做额外的工作了,但看起来不错!2) 主要解决方案:我能够将它应用到我的数据中,只需稍加调整,它就能完美地工作。非常感谢你!与我试图做的相比,答案非常简单。
df.index = idx