我有一个带有一列非唯一数字的 Pandas DataFrame。我想为每个非唯一值返回不同的随机数,但在非唯一值出现的每一行返回相同的随机数,即随机数的输出数据帧的形状与未分组数据帧的形状相匹配。
我可以这样做:
df.groupby('NonUnique').transform(lambda x: np.random.rand())
df这将根据需要为 中的每一列返回不同的随机数。
然而,对于大型数据帧来说,这很慢,但np.random.rand(df.size)速度非常快。有什么方法可以更有效地实现我想要的目标吗?我似乎找不到一种方法来矢量化每组的作业......
按唯一值的长度创建数组,然后使用factorizewithnumpy indexing进行重复:
np.random.seed(123)
df = pd.DataFrame({'A':list('aaabbb')})
a = np.random.rand(df['A'].nunique())
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
Run Code Online (Sandbox Code Playgroud)
细节:
print (pd.factorize(df.A)[0])
[0 0 0 1 1 1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1884 次 |
| 最近记录: |