基于Group ID与两数据集总和差值批量插入行的技术求助
解决方案:生成差值行并追加到数据集A
Python(Pandas)实现
import pandas as pd # 模拟数据集A data_a = pd.DataFrame({ 'Group': ['A', 'A', 'A', 'A', 'A', 'Total'], 'Sum': [1, 3, 4, 1, 2, 11] }) # 模拟数据集B data_b = pd.DataFrame({ 'Group': ['A', 'A', 'A', 'A', 'A', 'Total'], 'Sum': [5, 2, 3, 5, 5, 20] }) # 计算Group A的实际总和(排除Total汇总行) sum_a = data_a[data_a['Group'] != 'Total']['Sum'].sum() sum_b = data_b[data_b['Group'] != 'Total']['Sum'].sum() # 得到需要追加的行数 diff = sum_b - sum_a # 生成待追加的行数据 new_records = pd.DataFrame({ 'Group': ['A'] * diff, 'Sum': [1] * diff }) # 合并原数据集与新行,得到最终结果 final_data = pd.concat([data_a, new_records], ignore_index=True) print(final_data)
SQL(MySQL)实现
-- 计算两个数据集Group A的总和差值 SET @sum_a = (SELECT SUM(Sum) FROM data_a WHERE `Group` = 'A'); SET @sum_b = (SELECT SUM(Sum) FROM data_b WHERE `Group` = 'A'); SET @diff = @sum_b - @sum_a; -- 通过递归CTE生成对应数量的行 WITH RECURSIVE append_rows AS ( SELECT 1 AS row_num UNION ALL SELECT row_num + 1 FROM append_rows WHERE row_num < @diff ) -- 将生成的行插入到data_a表中 INSERT INTO data_a (`Group`, `Sum`) SELECT 'A', 1 FROM append_rows;
说明:如果你的Total行是手动添加的固定值,上述代码会保留该行并直接追加新记录;如果需要更新Total值,可在追加后重新计算并替换该行的Sum值。
内容的提问来源于stack exchange,提问作者Sai Paritala
相关产品推荐
相关产品推荐

