对于我的数据,我想连续 5 天抽样 5 批次。对于每组 5 天样本,我希望另一列中的值相同。我的数据是一个时间序列。这是一个示例:
以前,当我对非连续的日子感到满意时,我会使用以下代码:
df.groupby("AGENT").sample(n=5, random_state=1, replace = True)
我希望它是随机的,所以我不想只为第一个新代理和随后的 4 行获取索引。
groupby.apply
:
import numpy as np
n = 5
out = (df.groupby('Agent', group_keys=False)
.apply(lambda g: g.iloc[(x:=np.random.randint(0, len(g)-n)): x+n])
)
如果你有 python < 3.8:
import numpy as np
def random_consecutives(g, n):
start = np.random.randint(0, len(g)-n)
return g.iloc[start: start+n]
out = (df.groupby('Agent', group_keys=False)
.apply(random_consecutives, n=5)
)
示例输出:
Agent Sales (k) Date
2 1 1.2 21/08/2012
3 1 6.7 22/08/2012
4 1 5.8 23/08/2012
5 1 9.3 24/08/2012
6 1 8.3 25/08/2012
12 2 8.0 06/07/2012
13 2 0.9 07/07/2012
14 2 1.3 08/07/2012
15 2 1.6 09/07/2012
16 2 8.9 10/07/2012