如何优雅地将DataFrame列中数值向下取整至最近偶数?
优雅处理DataFrame数值列:向下取整至最近偶数
针对你给出的DataFrame,要实现将所有数值向下取整至最近的偶数,这里提供几种简洁高效的方法:
方法一:地板除结合乘法
利用Python的地板除运算符//,先将数值除以2后向下取整,再乘以2即可得到不大于原数的最大偶数,这是最直接的实现方式:
import pandas as pd data = [291.79, 499.31, 810.93, 1164.25] df = pd.DataFrame(data, columns=['Onset']) # 处理逻辑 df['Onset'] = (df['Onset'] // 2) * 2 # 转换为整数类型(可选,根据需求) df['Onset'] = df['Onset'].astype(int)
运行后得到的结果完全符合预期:
Onset 0 290 1 498 2 810 3 1164
方法二:使用numpy的floor函数
如果习惯用numpy的数值处理函数,也可以通过np.floor先对除以2后的结果向下取整,再乘以2:
import pandas as pd import numpy as np data = [291.79, 499.31, 810.93, 1164.25] df = pd.DataFrame(data, columns=['Onset']) df['Onset'] = np.floor(df['Onset'] / 2) * 2 df['Onset'] = df['Onset'].astype(int)
方法三:位运算(适合先取整为整数的场景)
如果需要先将浮点数转换为整数,再处理偶数,可以用位运算& ~1(等价于奇数减1、偶数保持不变):
import pandas as pd import numpy as np data = [291.79, 499.31, 810.93, 1164.25] df = pd.DataFrame(data, columns=['Onset']) # 先向下取整为整数,再做位运算 df['Onset'] = np.floor(df['Onset']).astype(int) & ~1
以上三种方法都能优雅实现需求,其中方法一最为简洁,无需额外导入numpy库。
内容的提问来源于stack exchange,提问作者jo_
相关产品推荐
相关产品推荐

