我的程序需要随机选择值而不重复它们。之后,程序将为它们分配随机变量。
假设这是数据:
[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]
but,我收到了这个
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
但这没有用,因为它是随机的,可能需要不止一次。有什么建议可以解决问题吗?
顺便说一句,所需的输出必须类似于上面的输出,但没有重复。
正如@ 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
您可以使用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)]