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

如何在Pandas中调整DataFrame的Space列为Size列的最近倍数(含Max限制)?

问题描述

现有如下DataFrame(input_df):

Item    Space   Size    Max
Apple   0.375   0.375   0.375
Lemon   0.625   0.375   0.75
Melon   0.5     0.375   0.625

需求:

  • 将Space列的值调整为Size列的最近倍数
  • 调整后的值必须满足 input_df['Space'] <= input_df['Max']
  • 新增extra列,记录调整前后Space值的增减量(新值 - 旧值)

预期输出的DataFrame(output_df)如下:

Item    Space   Size    Max     extra
Apple   0.375   0.375   0.375   0       
Lemon   0.75    0.375   0.75    0.125   # Space值调整为最近倍数
Melon   0.375   0.375   0.625   -0.125  # Space值调整为最近倍数
解决方案

通过pandas的向量化操作和自定义逻辑实现需求,代码如下:

import pandas as pd

# 构造输入数据
input_df = pd.DataFrame({
    'Item': ['Apple', 'Lemon', 'Melon'],
    'Space': [0.375, 0.625, 0.5],
    'Size': [0.375, 0.375, 0.375],
    'Max': [0.375, 0.75, 0.625]
})

# 步骤1:计算Space对应Size的最近倍数
input_df['new_space'] = round(input_df['Space'] / input_df['Size']) * input_df['Size']

# 步骤2:确保调整后的值不超过Max,若超过则取最大的合法倍数
input_df['new_space'] = input_df.apply(
    lambda row: row['new_space'] if row['new_space'] <= row['Max'] else (row['Max'] // row['Size']) * row['Size'],
    axis=1
)

# 步骤3:计算extra列(新值减旧值)
input_df['extra'] = input_df['new_space'] - input_df['Space']

# 替换原Space列并清理临时列
input_df['Space'] = input_df['new_space']
input_df.drop('new_space', axis=1, inplace=True)

# 打印结果
print(input_df)

运行代码后得到的输出与预期一致:

Item  Space   Size   Max  extra
0  Apple  0.375  0.375  0.375   0.000
1  Lemon  0.750  0.375  0.750   0.125
2  Melon  0.375  0.375  0.625  -0.125

内容的提问来源于stack exchange,提问作者user12345

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:25:37