繁体   English   中英

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

[英]How do I efficiently assign a single value per groupby group in Pandas

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

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

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

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

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

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]

我反正你分组,你可以使用ngroup()

df.groupby('column').ngroup()

或者

df.groupby('column').transform('ngroup')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM