You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 15:18:03