pandas如何基于行条件同时对多列数值执行加减更新操作
你遇到的报错是因为赋值语句左右两侧的长度不匹配:左侧是筛选后符合条件的若干行,右侧返回的是全表所有行的计算结果,二者行数不一致,因此触发了Must have equal len keys and value when setting with an ndarray的错误。
解决方案
首先先把筛选条件提取为掩码,后续复用:
# 定义筛选条件 mask = (df['x'] >= 1000) & (df['x'] < 1800) & (df['y'] >= 1150) & (df['y'] < 1290)
你可以直接用pandas的广播特性一次性完成四列的运算赋值,写法最简洁:
df.loc[mask, ['x', 'y', 'w', 'h']] += [-20, -165, 26, -29]
如果需要更清晰的逐列写法,也可以分开赋值:
df.loc[mask, 'x'] = df.loc[mask, 'x'] - 20 df.loc[mask, 'y'] = df.loc[mask, 'y'] - 165 df.loc[mask, 'w'] = df.loc[mask, 'w'] + 26 df.loc[mask, 'h'] = df.loc[mask, 'h'] - 29
两种写法执行后,你筛选出的第5行的数值就会更新为你期望的结果。
内容的提问来源于stack exchange,提问作者Vinod K. Ahuja
相关产品推荐
相关产品推荐

