在pandas数据框中为每一行生成随机值

3

你好,我有以下数据框:

import numpy as np
import pandas as pd
df = pd.DataFrame()
df['T1'] = ['A','B','C','D','E']
df['T2'] = ['G','H','I','J','K']
df['Match'] = df['T1'] +' Vs '+ df['T2']
Nsims = 5
df1 = pd.DataFrame((pd.np.tile(df,(Nsims,1))))

我通过将五个随机数字相加创建了两个新列 T1_point T2_point。但当我按照以下步骤操作时,所有行都给出了相同的数字。
Ninit = 5
df1['T1_point'] = np.sum(np.random.uniform(size=Ninit))
df1['T2_point'] = np.sum(np.random.uniform(size=Ninit))

我想要做的是使用随机数为每一行获取不同的值。
我该如何实现?
谢谢!
Zep.

1
如果你想要不同的值,为什么要对它们求和?这没有任何意义。 - cs95
请提供一个最小、完整、可验证的示例 - U13-Forward
@coldspeed,我正在尝试复制点球过程。这就是为什么我使用了5个随机数并将它们相加,以便我可以决定谁会赢。 - Zephyr
我不明白。所以你想把25个数字分成5组相加? - cs95
我正在为每场比赛模拟5次。 - Zephyr
我添加了“比赛”列。因此,我为每场比赛模拟5次点球大战。 - Zephyr
2个回答

10
你基本上正在要求每一行生成一个随机数。那就创建一个随机数列表,然后将它们附加到你的数据框中?
import random

df1['RAND'] = [ random.randint(1,10000000)  for k in df1.index]

print df1

    0  1     RAND
0   A  G  6850189
1   B  H  3692984
2   C  I  8062507
3   D  J  6156287
4   E  K  7037728
5   A  G  7641046
6   B  H  1884503
7   C  I  7887030
8   D  J  4089507
9   E  K  4253742
10  A  G  8947290
11  B  H  8634259
12  C  I  7172269
13  D  J  4906697
14  E  K  7040624
15  A  G  4702362
16  B  H  5267067
17  C  I  3282320
18  D  J  6185152
19  E  K  9335186
20  A  G  3448703
21  B  H  6039862
22  C  I  9884632
23  D  J  4846228
24  E  K  5510052

random.randint()不能保证总是生成唯一的值。 - letmecheck
@Mohan Babu,那么他可以使用范围,甚至使用索引来保证唯一性。说实话,我不太理解他在做什么。 - ajsp
谢谢ajsp。 我能够使用你的建议来扩展这个流程。 - Zephyr

1

列表推导式的答案并不是最优的。

更简单、更高效的答案是使用numpy中可用的size参数创建匹配的数组:

import numpy as np
df1['RAND'] = np.random.randint(1,10000000, size=len(df1))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接