如何在Pandas中用掩码对奇偶行分别执行np.floor和np.ceil操作
代码错误点
- 缺少numpy依赖导入:代码中直接使用
np.floor、np.ceil但没有导入numpy库,会触发NameError。 - 奇偶判断逻辑错误:
df % 2 != 0是对整个DataFrame的所有元素做模2运算,并非判断行序号的奇偶,运算结果维度和单列df['round']不匹配,直接触发AssertionError。按照你给出的预期结果,是按自然行号(从1开始计数)的奇偶处理:奇数行执行floor,偶数行执行ceil,对应pandas默认的0起始索引的规则为:索引为偶数的行执行floor,索引为奇数的行执行ceil。 - where方法使用错误:一方面
where的逻辑为「条件为True时保留原值,条件为False时替换为传入值」,你的条件逻辑和需求不匹配;另一方面没有将where的运算结果赋值回df['round'],就算无报错也不会修改原列数据。 - 性能冗余:使用
apply调用numpy函数属于逐行运算,远不如直接调用向量化numpy函数效率高。
正确实现
import pandas as pd import numpy as np df = pd.DataFrame([6114.26221, 6114.90137, 6145.16943, 6183.22803, 6202.06592, 6202.38037, 6202.93750, 6203.21387, ], columns=['onset']) # 向量化一步实现,性能最优 df['round'] = np.where(df.index % 2 == 0, np.floor(df['onset']), np.ceil(df['onset'])) # 输出验证 print(df['round'].to_string(index=False))
运行输出结果和你预期完全一致:
6114.0 6115.0 6145.0 6184.0 6202.0 6203.0 6202.0 6204.0
内容的提问来源于stack exchange,提问作者rpb
相关产品推荐
相关产品推荐

