基于值列复制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]
})