如何移除数组中客户与发票参考相同且金额总和为0的行
问题描述
我有一组包含以下字段的发票数据(已读取到数组中):
- 客户编号
- 发票编号(唯一,冲销发票会生成新编号)
- 发票参考(冲销发票与原发票的参考一致)
- 金额(冲销时为负数)
需要实现的逻辑:
当同一客户编号+同一发票参考对应的所有行金额总和为0时,删除该组合下的所有行。
原始数据示例
| 客户 | 发票编号 | 发票参考 | 金额 |
|---|---|---|---|
| 3233 | 91324941 | 91324941 | 143.966 |
| 3233 | 91323172 | 91323172 | 155.418 |
| 3233 | 91323173 | 91323172 | -418 |
| 3233 | 91330112 | 91324941 | -143.966 |
处理后预期结果
| 客户 | 发票编号 | 发票参考 | 金额 |
|---|---|---|---|
| 3233 | 91323172 | 91323172 | 155.418 |
| 3233 | 91323173 | 91323172 | -418 |
注:需处理约70个客户、4000条发票数据。
解决方案
方法1:使用Python Pandas(高效处理大数据)
Pandas的分组功能可以快速实现需求,代码简洁且性能足够应对4000条数据:
import pandas as pd # 假设原始数据为列表字典格式(可根据实际数组结构调整) invoice_data = [ {"客户": 3233, "发票编号": "91324941", "发票参考": "91324941", "金额": 143.966}, {"客户": 3233, "发票编号": "91323172", "发票参考": "91323172", "金额": 155.418}, {"客户": 3233, "发票编号": "91323173", "发票参考": "91323172", "金额": -418}, {"客户": 3233, "发票编号": "91330112", "发票参考": "91324941", "金额": -143.966} ] # 转换为DataFrame df = pd.DataFrame(invoice_data) # 按客户+发票参考分组,计算每组金额总和 grouped_sum = df.groupby(["客户", "发票参考"])["金额"].transform("sum") # 过滤出总和不为0的行 filtered_df = df[grouped_sum != 0] # 转换回数组格式(按需使用) filtered_data = filtered_df.to_dict("records") # 输出结果 print(filtered_data)
方法2:纯Python实现(无需第三方库)
如果环境受限无法使用第三方库,可通过字典分组计算总和后过滤数据:
invoice_data = [ {"客户": 3233, "发票编号": "91324941", "发票参考": "91324941", "金额": 143.966}, {"客户": 3233, "发票编号": "91323172", "发票参考": "91323172", "金额": 155.418}, {"客户": 3233, "发票编号": "91323173", "发票参考": "91323172", "金额": -418}, {"客户": 3233, "发票编号": "91330112", "发票参考": "91324941", "金额": -143.966} ] # 第一步:计算每个(客户, 发票参考)组合的金额总和 sum_map = {} for item in invoice_data: key = (item["客户"], item["发票参考"]) sum_map[key] = sum_map.get(key, 0) + item["金额"] # 第二步:过滤掉总和为0的组合对应的行 filtered_data = [item for item in invoice_data if sum_map[(item["客户"], item["发票参考"])] != 0] # 输出结果 for row in filtered_data: print(row)
关键逻辑说明
- 核心是按客户+发票参考的组合分组,冲销发票与原发票属于同一组合
- 若组合内金额总和为0,说明该组发票已完全冲销,需移除所有对应行
- 两种方法均可高效处理4000条数据:纯Python方法适合环境受限场景,Pandas方法更简洁易维护
内容的提问来源于stack exchange,提问作者MegaOctane
相关产品推荐
相关产品推荐

