Python中的乐透画模拟

2024-06-01 08:53:52 发布

您现在位置:Python中文网/ 问答频道 /正文

  • 问题:我正在尝试创建一个数据帧,其中有n个乐透抽奖模拟,*解决方案:为低球数生成从1到70的随机整数,并将每个迭代附加到一个数据帧。从1到25的powerball也有类似的过程。最后,合并两个数据帧
  • 输出:具有5k模拟的数据帧
  • 帮助:有没有更像Python的方法来达到同样的效果
import random


n_draws=5000
columns_list= ['1st','2nd','3rd','4th','5th','6th']
data= []
data1=[]

#to create a list of the first picks from 1 through 70
for i in range(n_draws):
    lowballs= (random.sample(range(1,70),6)) 
    data.append(lowballs)
df= pd.DataFrame(data, columns= columns_list)

#to get the powerball #
for i in range(n_draws):
    powerball= (random.sample(range(1,25),1))
    data1.append(powerball)
df1= pd.DataFrame(data1)

#merge both data sets
df2= pd.merge(df, df1, right_index=True, left_index=True)
df2.rename(columns={0:'Powerball'}, inplace=True)


Tags: columnstheto数据intruefordata
2条回答

好吧,按照我的想法以一种Python式的方式写:

我想按需生成一个彩票选择,然后在“数据帧”中获得所需的数量。编写基础知识,将其向下推,并用python表达问题:

import random


def lottery_dataframe(number_required=5000):
    return (lottery_pick() for _ in range(number_required))


def lottery_pick():
    return (*(lottery_digit_pick() for _ in range(6)), powerball_digit_pick())


def powerball_digit_pick():
    return random.randint(1, 25)


def lottery_digit_pick():
    return random.randint(1, 70)

请注意,这仅在需要时生成数据。要查看生成的内容,您可以将其包装在列表中,例如

In [1]: list(lottery_dataframe(4))                                                                                                                                                                                                                                                       
Out[1]: 
[(68, 10, 31, 28, 27, 49, 4),
 (26, 68, 24, 12, 62, 21, 19),
 (16, 20, 23, 52, 70, 36, 22),
 (9, 30, 33, 39, 21, 12, 6)]

使用numpy的random模块:

n_draws = 5000
lowballs = np.random.choice(np.arange(1, 71), size=(n_draws, 6))

df = pd.DataFrame(lowballs, columns=[f'lowball_{i}' for i in range(1,7)])
df['powerball'] = np.random.randint(1, 26, n_draws)

结果:

   lowball_1  lowball_2  lowball_3  lowball_4  lowball_5  lowball_6  powerball
0         41         61         66         63         50          1         17
1         41         19         19         54         65          2         16
2         55         32         16         20         14          2         12
3         69          4         58         53         10         15          8
4         45          2         49          7         46         14         23

相关问题 更多 >