假设您具有以下数据框:
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
解决方法:
这是另一种方式,它只是简单地将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)