如何在Python中为列中的每组值生成随机数?
我想向现有df添加3个不同的列,并基于现有列生成一个随机数(从0到1) 下面是一个小例子:如何在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的组。
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