如何在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
相关产品推荐
相关产品推荐

