基于值列复制PandasDataframe上的行,然后贴上计数器列

假设我有这个数据框df

    A   B   count
0   1   2   3
1   3   4   2
2   5   6   1
3   7   8   2     

然后我想根据count列进行行复制操作,然后添加一个执行计数器的新列。所以得到的结果是:

    counter   A   B   count
0   0         1   2   3
1   1         1   2   3
2   2         1   2   3
3   0         3   4   2
4   1         3   4   2
5   0         5   6   1
6   0         7   8   2
7   1         7   8   2  

我的想法是相应地复制行(使用 numpy 和 pandas df)。然后添加一counter列,该列为发现相同的每一行递增,然后在发现新行后重置为 0。但我在想这可能会很慢。有没有什么办法可以很容易地做到这一点,而不是那么慢?

回答

让我们尝试index.repeat放大 DataFrame,然后groupby cumcount创建组并将insert其放入前面的 DataFrame:

df = df.loc[df.index.repeat(df['count'])]
df.insert(0, 'counter', df.groupby(level=0).cumcount())
df = df.reset_index(drop=True)

df

   counter  A  B  count
0        0  1  2      3
1        1  1  2      3
2        2  1  2      3
3        0  3  4      2
4        1  3  4      2
5        0  5  6      1
6        0  7  8      2
7        1  7  8      2

数据框构造函数:

import pandas as pd

df = pd.DataFrame({
    'A': [1, 3, 5, 7], 'B': [2, 4, 6, 8], 'count': [3, 2, 1, 2]
})


以上是基于值列复制PandasDataframe上的行,然后贴上计数器列的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>