pandas 索引到df行的向量化

qojgxg4l  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(148)

我想矢量化我的代码,并尝试

df['results'] = coord.loc[df['a'],'x_coord'] * coord.loc[df['b'],'y_coord']

但是它返回错误“ValueError:无法在具有重复标签的轴上重新索引”,因为df ['a]和df [' b ']都包含重复值。这些不能被移除,因为它们是整个点(df包含坐标,因此存在像(1,0),(1,1),(0,1)等这样的对)。
这个使用apply的版本工作得很好,但是太慢了(实际的dfs有接近一百万行,并且有数千行需要处理):

def calc(a,b):
     result = coord.loc[a,'x_coord'] * coord.loc[b,'y_coord']
     return result
df['results'] = df.apply(lambda row: calc(row['a'],row['b']),axis=1)

任何关于如何修复错误或其他矢量化/加速此位的方法的提示都是受欢迎的!

epggiuax

epggiuax1#

这是因为coorddf具有重复索引。你可以把它们转换成numpy数组:

df['results'] = coord.loc[df['a'],'x_coord'].to_numpy() * coord.loc[df['b'],'y_coord'].to_numpy()

相关问题