Pandas:我想对数据进行切片和混洗,以生成一些合成数据



我们只是想帮助数据科学生成一些合成数据,因为我们没有足够的标记数据。我想在0左右剪切y列的随机位置周围的行,不要剪切1个序列。

剪切后,要打乱这些切片并生成新的DataFrame。

最好有一些参数来调整要切割的最大和最小顺序、切割次数等等。

原始数据

ts   v1    y
0    100   1
1    120   1
2    80    1
3    5     0
4    2     0
5    100   1
6    200   1
7    1234  1
8    12    0
9    40    0
10   200   1
11   300   1
12   0.5   0
...

一些可能的削减

ts   v1    y
0    100   1
1    120   1
2    80    1
3    5     0
--------------
4    2     0
--------------
5    100   1
6    200   1
7    1234  1
-------------
8    12    0
9    40    0
10   200   1
11   300   1
-------------
12   0.5   0
...
ts   v1    y
0    100   1
1    120   1
2    80    1
3    5     0
4    2     0
-------------
5    100   1
6    200   1
7    1234  1
8    12    0
9    40    0
10   200   1
11   300   1
------------
12   0.5   0
...

这不正确

ts   v1    y
0    100   1
1    120   1
------------
2    80    1
3    5     0
4    2     0
5    100   1
6    200   1
7    1234  1
8    12    0
9    40    0
10   200   1
11   300   1
12   0.5   0
...

您可以使用:

#number of cuts
N = 3
#create random N index values of index if y=0
idx = np.random.choice(df.index[df['y'].eq(0)], N, replace=False)
#create groups with check membership and cumulative sum
arr = df.index.isin(idx).cumsum()
#randomize unique integers - groups  
u = np.unique(arr)
np.random.shuffle(u)
#change order of groups in DataFrame
df = df.set_index(arr).loc[u].reset_index(drop=True)
print (df)
ts      v1  y
0    9    40.0  0
1   10   200.0  1
2   11   300.0  1
3   12     0.5  0
4    3     5.0  0
5    4     2.0  0
6    5   100.0  1
7    6   200.0  1
8    7  1234.0  1
9    8    12.0  0
10   0   100.0  1
11   1   120.0  1
12   2    80.0  1

最新更新