我有物品清单(每行有以下内容:物品编号、批号、说明、总数量)。如果列表中的某个批号存在两次,则将这两行的数量相加。“数据”是我的原始列表。“max_item”是项目在“数据”中出现的最大次数。我创建了一个新列表(每行一个批次列表),并将更新的行添加到列表中,但我还需要添加“数据”中没有重复批次的行。或者,我需要删除下面代码中未从“data”(data[I+1+j])更新的行。不确定最好的方法是创建新列表还是从原始列表中删除行。希望这是有意义的!非常感谢大家的帮助
下面的示例列表——最后两行具有相同的内部批号。我想将它们的总可用数量相加,然后删除未更新的行
Part Internal Lot Number Description Total available Expiration Date Location
0001 QLN03867 P 2 3/31/2025 FRZ06 Half 1
0002 QLN03923 A 15 4/30/2023 F01-S01-05
0002 QLN03469 A 3 9/30/2022 F01-S03-02
0003 QLN03924 G 15 9/30/2022 F01-S01-05
0003 QLN03470 G 2 9/30/2022 F01-S01-02
0004 QLN03466 U 4 10/31/2022 F01-S03-02
0005 QLN03925 C 10 4/30/2023 F01-S01-02
0005 QLN03471 C 2 9/30/2022 F01-S01-02
0006 QLN03468 R 5 7/31/2021 F01-S03-02
0007 QLN03994 I 2 4/13/2025 F01-S03-03
0007 QLN03994 I 1 4/13/2025 F01-S03-02
data = []
for row in csv_reader:
azpn = row[0]
azln = row[1]
description = row[2]
location = row[5]
date = datetime.strptime(row[4], '%m/%d/%Y')
total_available = int(row[3])
data.append([azpn, azln, description, total_available, date, location])
one_lot_per_row_list = []
i = 0
j = 1
for i in range(len(data)- max_item):
# if the lot number of row i is equal to the lot number of row i + j
for j in range(max_item):
if data[i][1] == data[i+1+j][1]:
#add total available of data[i] to row data[i+1+j]
data[i][3] += data[i+1+j][3]
#append the new row to one_lot_per_row_list
one_lot_per_row_list.append(data[i])
j+=1
i+=1
您可以继续使用您的方法,或选择更优雅的方法,如下所示:
IIUC,您可以通过
pandas
轻松完成这项工作。另一种选择是itertools groupby
:这里有一种通过
pandas
的方法:groupby
批号并转换列{subset
=['Internal Lot Number', 'Total']
删除重复项to_csv
保存CSV文件李>相关问题 更多 >
编程相关推荐