Skip to main content
 首页 » 编程设计

python之如何在 Pandas 中有效地为每个 groupby 组分配一个值

2025年05月04日18jpfss

我有一个带有非唯一数字列的 Pandas DataFrame。我想为每个非唯一值返回一个不同的随机数,但在非唯一值出现的每一行返回相同的随机数,即随机数的输出数据帧的形状与未分组数据帧的形状匹配.

我可以这样做: df.groupby('NonUnique').transform(lambda x: np.random.rand())

这会根据需要为 df 中的每一列返回一个不同的随机数。

然而,这对于大型数据帧来说很慢,但是 np.random.rand(df.size) 非常快。有没有办法以更有效的方式实现我想要的?我似乎找不到一种方法来向量化每组的分配...

请您参考如下方法:

按唯一值的长度创建数组,然后使用 factorize使用 numpy 索引 进行重复:

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]