我试图在一个数据帧上创建一个列,该列包含a列(值列)的最小值,而B列(id列)具有特定值。我的代码很慢。我在找一个更快的方法。以下是我的小功能:
def apply_by_id_value(df, id_col="id_col", val_col="val_col", offset_col="offset", f=min):
for rid in set(df[id_col].values):
df.loc[df[id_col] == rid, offset_col] = f(df[df[id_col] == rid][val_col])
return df
示例和用法:
^{pr2}$更多的上下文:在我的实际数据中,“id_col”列有大约30000个或更多的唯一值。这意味着数据帧必须被切片30000次。我想这就是瓶颈。在
对'id_col'执行^{} ,然后执行^{} 传递函数'min',这将返回一个与原始df对齐的序列,以便您可以添加为新列:
计时
^{pr2}$因此,}在这个数据集上更快,我希望它在实际数据集中更快,因为它可以更好地扩展。在
groupby
和{对于800000行数据流,我得到以下时间安排:
相关问题 更多 >
编程相关推荐