Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中为列中的每组值生成随机数?_Python - Fatal编程技术网

如何在Python中为列中的每组值生成随机数?

如何在Python中为列中的每组值生成随机数?,python,Python,我想向现有df添加3个不同的列,并基于现有列生成一个随机数(从0到1) 下面是一个小例子: data = { 'Row': [1,1,2,2,2,2] } df = pd.DataFrame(data, columns = ['Row']) df Row 0 1 1 1 2 2 3 2 4 2 5 2 这是我想要得到的输出(当然,数字应该是随机的,请注意,“行”有数千个值): 编辑: 请注意,我希望为每个组获取不同的数字(组=1的组或2的组。

我想向现有df添加3个不同的列,并基于现有列生成一个随机数(从0到1)

下面是一个小例子:

data = {
        'Row': [1,1,2,2,2,2]
}
df = pd.DataFrame(data, columns = ['Row'])
df


    Row
0   1
1   1
2   2
3   2
4   2
5   2
这是我想要得到的输出(当然,数字应该是随机的,请注意,“行”有数千个值):

编辑:
请注意,我希望为每个组获取不同的数字(组=1的组或2的组。等等)

在单独的数据帧中获取行的所有唯一值,它将为
列保存行的唯一值

随机导入
>>randomDF=df.删除重复项(忽略索引=True)
>>随机数
一行
0    1
1    2
现在您有了唯一的行,创建所需列的列表,并使用numpy生成所需形状的随机数组,然后为所需列将其分配回
randomDF

>将numpy作为np导入
>>probCols=['Prob A'、'Prob B B'、'Prob C']
>>randomDF[probCols]=np.random.random((randomDF.shape[0],len(probCols)))
>>随机数
行Prob A Prob B Prob C
0    1  0.152064  0.391139  0.242061
1    2  0.963488  0.020088  0.710162
现在您有了所需的数据帧,只需将其合并回原始数据帧:

df=df.merge(randomDF,on=['Row'])
输出

行Prob A Prob B Prob C
0    1  0.152064  0.391139  0.242061
1    1  0.152064  0.391139  0.242061
2    2  0.963488  0.020088  0.710162
3    2  0.963488  0.020088  0.710162
4    2  0.963488  0.020088  0.710162
5    2  0.963488  0.020088  0.710162

如果在十进制之后只需要两个数字,您甚至可以考虑在NoMPY <代码>圆< /COD>函数中包装随机数生成函数:

np.round(np.random.random((randomDF.shape[0],len(probCols))),2)
在本例中,输出如下所示:

行Prob A Prob B Prob C
0    1    0.70    0.87    0.89
1    1    0.70    0.87    0.89
2    2    0.37    0.69    0.66
3    2    0.37    0.69    0.66
4    2    0.37    0.69    0.66
5    2    0.37    0.69    0.66

您可以使用numpy创建随机数,然后添加它们

import pandas as pd
import numpy as np

data = {
        'Row': [1,1,2,2,2,2]
}

df = pd.DataFrame(data, columns = ['Row'])

for n in ['A','B', 'C']:
    df['Prob_'+n] =np.random.uniform(0,1,df.shape[0])
结果:

   Row    Prob_A    Prob_B    Prob_C
0    1  0.310217  0.403894  0.165847
1    1  0.070634  0.676152  0.049274
2    2  0.692328  0.374179  0.948320
3    2  0.871153  0.501692  0.492484
4    2  0.874693  0.494560  0.464135
5    2  0.015399  0.244446  0.774907

你的prob列都有相同的值?@user_na,ya,现在我已经更新了答案,因为问题也被更新了。
   Row    Prob_A    Prob_B    Prob_C
0    1  0.310217  0.403894  0.165847
1    1  0.070634  0.676152  0.049274
2    2  0.692328  0.374179  0.948320
3    2  0.871153  0.501692  0.492484
4    2  0.874693  0.494560  0.464135
5    2  0.015399  0.244446  0.774907