Выбор данных случайным образом без повторения в индексе и создание нового списка из него - PullRequest
0 голосов
/ 14 ноября 2018

Моя программа должна выбирать значения случайным образом, не повторяя их. После этого программа назначит им случайные величины.

Предположим, что это данные:

[input] data
[output]
                 0
0       770000.000
1       529400.000
2       780000.000
3       731300.000
4       935000.000
5       440000.000
6       634120.000
7       980000.000
8       600000.000
9       770000.000
10      600000.000
11      536613.000
12      660000.000
13      850000.000
14      563600.000
15      985000.000
16      600000.000
17      770000.000
18      957032.000
19      252000.000
20      397000.000
21      218750.000
22      785578.000

Как видите, данные содержат повторяющиеся числа в индексе 0, 9 и 17. Эти цифры нельзя игнорировать, так как индекс отличается. Я не мог найти способ решить мою проблему. У меня было много попыток, таких как data.iloc[0], но я получил это

error ValueError: Истинное значение массива с более чем одним элемент неоднозначен. Используйте a.any () или a.all ()

Или, в других моих попытках, данные были сокращены, так как программа исключила некоторые подобные данные.

В моей первой попытке я использовал следующий код

Col_list = []    


def Grab(repeat):
        for x in range(FixedRange):


            letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
            Three = [random.choice(letters) + \
                     random.choice(letters) + \
                     random.choice(letters)]

            A_Slice = random.randint(1, Total_Range_of_Data)
            [Col_list.append(data[A_Slice:A_Slice + 200]),
            Col_list.append(Three*len(data[A_Slice:A_Slice + 200]))]
            Col_list1 = pd.DataFrame(Col_list).T
            Col_listFinal = Col_list1

Grab(0)

и результат выдаст что-то вроде

  .                 .                  .                    .
  .                 .                  .                    .
 190  1.06934e+06  kCn  3.46638e+06  EmV ...        514564  LLl       450000  hfX
 191       250000  kCn     1.37e+06  EmV ...   1.00430e+06  LLl       468305  hfX
 192       741088  kCn     1.25e+06  EmV ...        312032  LLl       520000  hfX
 193       427500  kCn       726700  EmV ...    1.0204e+06  LLl       495750  hfX
 194       969600  kCn       853388  EmV ...        139300  LLl       530000  hfX
 195       388556  kCn     1.21e+06  EmV ...        437500  LLl       598520  hfX
 196    2.045e+06  kCn  1.53636e+06  EmV ...        547835  LLl       538250  hfX
 197       435008  kCn       752700  EmV ...        712400  LLl       326000  hfX
 198  6.15566e+06  kCn  1.56282e+06  EmV ...     1.385e+06  LLl       480000  hfX
 199       551650  kCn    1.222e+06  EmV ...        771512  LLl       495750  hfX

Но это не полезно, так как оно случайное и может принимать некоторые значения более одного раза. Любое предложение для решения проблемы?

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

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Как сказал @ peter-leimbigler, df.sample поможет вам в этом.

df.sample(10))

        data
4   935000.0
13  850000.0
20  397000.0
7   980000.0
22  785578.0
18  957032.0
19  252000.0
10  600000.0
5   440000.0
0   770000.0

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

Если вы хотите только сэмплировать уникальные значения, вы можете использовать df [column] .unique, хотя вы не можете сэмплировать это напрямую.

unique_series = df["data"].unique()
df2 = pd.DataFrame(list(unique_series), columns=["data"])

        data
0   770000.0
1   529400.0
2   780000.0
3   731300.0
4   935000.0
5   440000.0
6   634120.0
7   980000.0
8   600000.0
9   536613.0
10  660000.0
11  850000.0
12  563600.0
13  985000.0
14  957032.0
15  252000.0
16  397000.0
17  218750.0
18  785578.0
0 голосов
/ 14 ноября 2018

Вы можете выбрать случайные индексы без замены, используя numpy.random.choice с ключевым словом replace=False arg. Вот как можно выбрать n случайные значения из data без повторяющихся индексов:

import numpy as np
drand = data.iloc[np.random.choice(np.arange(data.size), n, replace=False)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...