我有一列非唯一数字的Pandas DataFrame。我想为每个非唯一值返回不同的随机数,但是在出现非唯一值的每一行都返回相同的随机数,即随机数输出数据框的形状与未分组数据框的形状匹配。
我可以这样: df.groupby('NonUnique').transform(lambda x: np.random.rand())
根据需要,这将为中的每个列返回不同的随机数df
。
但是,这对于大型数据帧np.random.rand(df.size)
来说很慢,但是非常快。有什么方法可以更有效地实现我想要的吗?我似乎找不到一种向量化每组作业的方法...
根据唯一值的长度创建数组,然后使用factorize
withnumpy indexing
重复:
np.random.seed(123)
df = pd.DataFrame({'A':list('aaabbb')})
a = np.random.rand(len(df['A'].unique()))
df['B'] = a[pd.factorize(df.A)[0]]
print (df)
A B
0 a 0.696469
1 a 0.696469
2 a 0.696469
3 b 0.286139
4 b 0.286139
5 b 0.286139
详细说明:
print (pd.factorize(df.A)[0])
[0 0 0 1 1 1]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句