【问题标题】:Apply np.random.rand to groups - optimization issue将 np.random.rand 应用于组 - 优化问题
【发布时间】:2019-05-25 12:10:33
【问题描述】:

需要优化在计算期间将执行数万次的单行代码,因此时间成为问题。看似简单,实则卡住了。

该行是:

df['Random']=df['column'].groupby(level=0).transform(lambda x: np.random.rand())

所以我想为每个组分配相同的随机数并“取消组合”。由于使用此实现多次调用 rand(),因此代码非常无效。

有人可以帮忙向量化吗?

【问题讨论】:

  • 如果你想分配随机数为什么你需要groupby?您可以直接使用np.random.rand 来填充Random 列。
  • 一种方法是在 df['column'] 中选择唯一值,在此 df 中创建一个新列,然后与初始数据框连接。但必须存在更优雅的解决方案。
  • 需要 groupby() 以确保为每个组分配相同的随机数。

标签: pandas pandas-groupby pandas-apply


【解决方案1】:

试试这个!

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。

【讨论】:

  • 确实可行!需要将 right_on 替换为 right_index=True。仍然在数据中有许多组的情况下,连接操作可能会花费大量时间。想知道是否有单线可以做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多