我需要这方面的帮助。 我想随机化一组数据,比如输入中的数据。输出将使时间列保持不变,但“S”列中不为零的数据将随机分布,但我们保留数字序列。也就是说,在输入的例子中,我们随机分布了这几组数据(300、200、325、411)和(450,346,250)。
输入:
时间 | S |
---|---|
2:30 | 0 |
2:35 | 0 |
2:40 | 300 |
2:45 | 200 |
2:50 | 325 |
2:55 | 411 |
3:00 | 0 |
3:05 | 0 |
3:10 | 450 |
3:15 | 346 |
3:20 | 250 |
3:25 | 0 |
3:30 | 0 |
这就是我的想法...
步骤:
对非零序列进行分组:这是我不太清楚的部分
随机分组
import random
random.shuffle(groups)
注意:如果您认为有另一种方法可以解决这个问题,请注意。
可能的输出:
时间 | S |
---|---|
2:30 | 300 |
2:35 | 200 |
2:40 | 325 |
2:45 | 411 |
2:50 | 0 |
2:55 | 0 |
3:00 | 450 |
3:05 | 346 |
3:10 | 250 |
3:15 | 0 |
3:20 | 0 |
3:25 | 0 |
3:30 | 0 |
答案 0 :(得分:1)
想法是通过比较 0
和链式移位值 |
为正则表达式 OR
和 Series.cumsum
创建连续组,然后通过随机值更改顺序:
m = df.S.eq(0)
s = (m | m.shift()).cumsum()
ids = s.unique()
np.random.shuffle(ids)
df = df.set_index(s).loc[ids].reset_index(drop=True)
print (df)
time S
0 2:30 0
1 2:40 300
2 2:45 200
3 2:50 325
4 2:55 411
5 3:25 0
6 3:10 450
7 3:15 346
8 3:20 250
9 3:05 0
10 2:35 0
11 3:00 0
12 3:30 0