假设您有以下数据框:
item_a item_b
1 123
7 32
4 18
然后你有一个常量`PERIODS = 3',我如何重复上述数据帧3次,同时将每次重复添加为计数器。
期望的结果是:
counter item_a item_b
1 1 123
1 7 32
1 4 18
2 1 123
2 7 32
2 4 18
3 1 123
3 7 32
3 4 18
答案 0 :(得分:2)
IIUC使用reindex
,然后我们使用groupby
cumcount
s=df.reindex(df.index.tolist()*3)
s.index=s.groupby(s.index).cumcount()+1
s
Out[1349]:
item_a item_b
1 1 123
1 7 32
1 4 18
2 1 123
2 7 32
2 4 18
3 1 123
3 7 32
3 4 18
答案 1 :(得分:1)
这是另一种方法,它简单地连接你的df,但是你想要多次,将索引设置为每次连接逐渐增加的常量:
import numpy as np
period=3
new_df = pd.concat([df.set_index(np.repeat(i, len(df))) for i in range(1,period+1)])
>>> new_df
item_a item_b
1 1 123
1 7 32
1 4 18
2 1 123
2 7 32
2 4 18
3 1 123
3 7 32
3 4 18
# Or, to have counter as a separate column rather than the index:
new_df = pd.concat([df.assign(counter=np.repeat(i, len(df)))
for i in range(1,period+1)]).reset_index(drop=True)
解决方案2
从您的评论中看,您正在寻找快速执行代码,此方法更快:
new_df = pd.DataFrame(np.repeat([df.values],period, axis=0).reshape(-1,df.shape[1]),
index=np.repeat(range(1,period+1), len(df)), columns=df.columns)