Python 在索引中不重复地随机拾取数据,并从中创建新列表

Python 在索引中不重复地随机拾取数据,并从中创建新列表,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,我的程序需要随机选取值而不重复它们。之后,程序将为它们分配随机变量 假设这是数据: [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.

我的程序需要随机选取值而不重复它们。之后,程序将为它们分配随机变量

假设这是数据:

[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
但这是没有帮助的,因为它是随机的,可能会多次使用某些值。有什么解决问题的建议吗


顺便说一下,所需的输出必须与上面的类似,但没有重复项。

您可以使用
numpy.random.choice
replace=False
关键字arg来选择随机索引,而无需替换。以下是您如何从
数据
中选择
n
随机值,而无需重复索引:

import numpy as np
drand = data.iloc[np.random.choice(np.arange(data.size), n, replace=False)]

您可以使用
numpy.random.choice
replace=False
关键字arg在不替换的情况下选择随机索引。以下是您如何从
数据
中选择
n
随机值,而无需重复索引:

import numpy as np
drand = data.iloc[np.random.choice(np.arange(data.size), n, replace=False)]

正如@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

正如@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

预期的输出是什么?与我文章末尾的输出类似,但没有重复的值。这可能是pandas.DataFrame.sample的作业吗?你能选择一个值两次,而不是索引位置两次(或更多)吗?@Evan这是正确的。只有索引是不重复的索引。Peter Leimbigler这是否可以循环?预期的输出是什么?与我文章末尾的输出类似,但没有重复的值。这是否是pandas.DataFrame.sample的作业?你能选择一个值两次,而不是索引位置两次(或更多)吗?@Evan这是正确的。只有索引是不重复的索引。Peter Leimbigler这能循环吗??