Как случайным образом выбрать n блоков из набора данных - PullRequest
3 голосов
/ 27 июня 2019

У меня есть 100 фрагментов сэмплов, в каждом из которых есть 100 элементов.Элементы в одном фрагменте находятся на расстоянии 5 секунд;Однако разница во времени между элементами из разных кусков составляет не менее 5 часов (не фиксированное время).Моя главная цель - случайно выбрать 10 блоков данных из набора данных.

Мой набор данных:

index     time                  value   
i       12-1-2019 05:22:43       12         }  Chunk 1
i+1     12-1-2019 05:22:48       13
i+2     12-1-2019 05:22:53       14
..
i+99  ...............................

i+x      12-1-2019 13:32:12      31         }  Chunk 2
i+x+1    12-1-2019 13:32:17      77
i+x+2    12-1-2019 13:32:22      16
..
i+x+99  ...............................

i+x      14-1-2019 23:45:43      14         }  Chunk 3
i+x+1    14-1-2019 23:45:48      57
i+x+2    14-1-2019 23:45:53      46
..
i+x+99  ...............................

Примечание: фрагменты упорядочены (т. Е. Блок 1 возник раньше, чем блок 2, возникший до блока)3 и т. Д.).

Я бы хотел выбрать 10 блоков из 100 случайным образом.Однако порядок элементов в чанке важен и не может быть перемешан.

1 Ответ

1 голос
/ 27 июня 2019

Если я правильно вас понял, ваш первый блок переходит с индекса 0 на индекс 99, второй блок с индекса 99 на индекс 199 и т. Д.

Если это так, вы можете просто получить десять уникальных случайных чисел от 0 до 99 и iloc соответствующих строк из вашего набора данных.

Предполагая, что ваши данные находятся в панде DataFrame:

[dataset.iloc[index*100:index*100 + 100] for index in random.sample(range(0,100),10)]

Я не тестировал код, потому что у меня нет ваших данных, но приведенная выше кодовая строка должна дать вам список из 10 кусков длиной 100.

Если куски в вашем списке должны быть упорядочены, как в исходном кадре данных, вы можете просто отсортировать случайные числа:

[dataset.iloc[index*100:index*100 + 100] for index in sorted(random.sample(range(0,100),10))]
...