Python:将DataFrame求和差值调整至最后季度以匹配原总和
调整取整后DataFrame的季度列以匹配原始数据总和
需求说明
对比原始DataFrame(original_df)与取整后DataFrame(rounded_df)的总和,若两者总和存在差值(delta),则将该差值通过加减操作应用到最后一季度(q421)列,使最终生成的final_df的总和与original_df完全一致。
数据示例
原始数据(original_df)
id q121 q221 q321 q421 sum AA 1 0.5 0.5 6.1 8 BB 1 0.5 6.5 3.1 12
取整后数据(rounded_df)
id q121 q221 q321 q421 sum AA 2 2 2 6 12 BB 2 2 6 4 14
期望结果(final_df)
id q121 q221 q321 q421 sum delta AA 2 2 2 2 8 4 BB 2 2 6 2 12 2
已完成步骤
- 对比总和并生成delta列:
final_df['delta'] = np.where(original_df['sum'] == rounded_df['sum'], 0, original_df['sum'] - rounded_df['sum'])
解决方案建议
直接对q421列执行加减delta的操作,同时同步更新sum列即可实现需求:
# 以取整后的数据为基础创建final_df final_df = rounded_df.copy() # 计算delta列 final_df['delta'] = np.where(original_df['sum'] == rounded_df['sum'], 0, original_df['sum'] - rounded_df['sum']) # 调整最后一季度列:用取整后的q421值加上delta final_df['q421'] = rounded_df['q421'] + final_df['delta'] # 更新sum列,确保与原始数据总和完全一致 final_df['sum'] = original_df['sum']
验证逻辑:以AA行为例,取整后的q421为6,delta为8-12=-4,6 + (-4)=2,与期望结果一致;BB行取整后的q421为4,delta为12-14=-2,4 + (-2)=2,同样符合要求。
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

