![](/img/trans.png)
[英]Pandas: How to assign the value to the first row of a group after 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.