根据条件对数据进行分组和随机化

时间:2021-03-31 08:31:47

标签: python pandas numpy

我需要这方面的帮助。 我想随机化一组数据,比如输入中的数据。输出将使时间列保持不变,但“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

这就是我的想法...

步骤:

  1. 对非零序列进行分组:这是我不太清楚的部分

  2. 随机分组

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

1 个答案:

答案 0 :(得分:1)

想法是通过比较 0 和链式移位值 | 为正则表达式 ORSeries.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
相关问题