Pandas 将np.random.rand应用于组-优化问题

Pandas 将np.random.rand应用于组-优化问题,pandas,pandas-groupby,pandas-apply,Pandas,Pandas Groupby,Pandas Apply,需要优化一行代码,这些代码将在计算期间执行数万次,因此计时成为一个问题。看起来很简单,但真的卡住了 电话是: df['Random']=df['column'].groupby(level=0).transform(lambda x: np.random.rand()) 所以我想给每个组和“解组”分配相同的随机数。由于使用此实现多次调用rand(),因此代码效率很低 有人能帮我把这个矢量化吗?试试这个 df = pd.DataFrame(np.sort(np.random.randint(2,

需要优化一行代码,这些代码将在计算期间执行数万次,因此计时成为一个问题。看起来很简单,但真的卡住了

电话是:

df['Random']=df['column'].groupby(level=0).transform(lambda x: np.random.rand())
所以我想给每个组和“解组”分配相同的随机数。由于使用此实现多次调用rand(),因此代码效率很低

有人能帮我把这个矢量化吗?

试试这个

df = pd.DataFrame(np.sort(np.random.randint(2,5,50)),columns=['column'])
uniques =df['column'].unique()
final = df.merge(pd.Series(np.random.rand(len(uniques)),index=uniques).to_frame(),
                 left_on='column',right_index=True)

您可以存储
uniques
,然后每次运行最后一行以获得新的随机数并加入df

如果要分配随机数,为什么需要groupby?您可以直接使用
np.random.rand
填充该
random
列。一种方法是在df['column']中选择唯一的值,在此df中创建一个新列,然后与初始数据帧联接。但必须存在更优雅的解决方案。需要groupby()来确保为每个组分配相同的随机数。这确实有效!需要用right_index=True替换right_on。但是,如果数据中有许多组,则联接操作可能需要花费大量时间。不知道是否有一个班轮这样做。