Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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_Pandas_Dataframe_Random - Fatal编程技术网

Python 熊猫:将给定范围内的随机数指定给相等的列值

Python 熊猫:将给定范围内的随机数指定给相等的列值,python,pandas,dataframe,random,Python,Pandas,Dataframe,Random,我正在处理一个大型数据集,其中一列有很长的整数,如下所示: Column_1 Column_2 1 A 12345123451 2 B 12345123451 3 C 12345123451 4 D 23456789234 5 E 23456789234 6 F

我正在处理一个大型数据集,其中一列有很长的整数,如下所示:

       Column_1        Column_2
  1     A              12345123451
  2     B              12345123451
  3     C              12345123451
  4     D              23456789234
  5     E              23456789234
  6     F              34567893456
这里重要的不是第2列中的实际数字,而是当这些数字相同而第1列不同时。我想从一系列较小的数字中随机重新分配列2的值,比如(1999)


我的问题是如何在lambda函数中描述列2中的每个相等值都需要相同的随机数

您可以使用
np.random.choice
创建一个介于1和999之间的随机数数组,确保说
replace=False
,这样您就不会得到任何重复,然后将
Column_2
映射到带有随机数数组的
Column_2
唯一值的字典映射:

import numpy as np 

nums = np.random.choice(range(1,999), size = df['Column_2'].nunique(), replace=False)

# If you prefer to use the random package rather than numpy, uncomment the following:
# import random
# nums = random.sample(range(1,999), df['Column_2'].nunique())

df['Column_2'] = df['Column_2'].map(dict(zip(df['Column_2'].unique(), nums)))

>>> df
  Column_1  Column_2
1        A       274
2        B       274
3        C       274
4        D       842
5        E       842
6        F       860
说明:

您的数字数组如下所示:

>>> nums
array([274, 842, 860])
>>> dict(zip(df['Column_2'].unique(), nums))
{12345123451: 274, 23456789234: 842, 34567893456: 860}
您的映射字典如下所示:

>>> nums
array([274, 842, 860])
>>> dict(zip(df['Column_2'].unique(), nums))
{12345123451: 274, 23456789234: 842, 34567893456: 860}

因此,当你映射时,你是说用
274
替换
12345123451
23456789234
替换
842
,等等…

从sacul的
replace=False
中得到提示(更新答案)

使用
pandas.factorize
numpy.random

在我看来,OP只关心
“Column\u 2”
。如果
'Column_1'
是相同的,我怀疑它没有意义。让我问另一个问题:这些随机数不可能是相同的,对吗?如果随机生成随机数,不同的组可能会得到相同的数,这就是
replace=False
的作用。当您将
np.random.choice
与该参数一起使用时,它将确保没有重复项。与
random.sample
(默认情况下)Awesome:}没有看到
replace=False
+1因为OP似乎实际上并不关心
Column_2
的值,我想他们最终可以选择实际使用
df['Column_2']=pd.factorize(df.Column_2)[0]
,并将其作为
[0,0,0,1,1,2]
。。。不是随机的,但如果目标只是为每一个都有不同的类别,那就行了。无论如何,我喜欢你的方法!这是真的。我们来看看OP是否真的想要随机的
”\_(ツ)_/“