gpt4 book ai didi

python - 在 Python 中对 CSV 数据进行分组和子分组

转载 作者:行者123 更新时间:2023-12-01 05:16:55 26 4
gpt4 key购买 nike

这是我的 CSV 格式的示例数据集:

Column[1], Column[2], Account, CostCentre, Rate, Ex VAT,  VAT
000000000, 00000000, 4200213, G1023, 0, 10.50, 0.0
000000000, 00000000, 4200213, G1023, 20, 10.50, 2.1
000000000, 00000000, 4200213, G1023, 0, 10.50, 0.0
000000000, 00000000, 4200213, G1023, 20, 10.50, 2.1

我正在尝试创建一个专注于帐号的输出文件,并按成本中心和税率对其进行进一步分组,因此,任何具有帐号 4200213 的内容都需要包含在输出中,否则所有其他行都可以包含在输出中。被忽略。

其次,如果成本中心被重复,假设在本例中为 G1023,我希望 python 脚本确定税率是否匹配,如果匹配,我希望输出文件按税率将其分组并求和除增值税和增值税成本的方式,期望的结果应如下:

Cost Centre, Rate, Ex VAT, VAT, In VAT

G1023, 0, 21, 0, 21
G1023, 20, 21, 4.2, 25.20

我一直在尝试解决这个问题,但没有成功。我当前的代码如下:

import os
import sys
import csv

os.path.dirname = "./"
InputFile_name = "Book1.csv"
InputFile = csv.reader(open(InputFile_name, "r"))
OutputFile_name = "Journal.csv"
OutputFile = open(OutputFile_name, "w")
mydict = []

OutputFile.write("Cost Centre, Tax Rate, Total Ex VAT, VAT, Total In VAT\n")

for line in InputFile:
if line[2] == "4200213":
Cost_Centre = line[3]
Rate = line[4]
Ex_VAT = line[5]
VAT = line[6]
if Cost_Centre in mydict:
continue
else:
mydict.append(Cost_Centre)

for item in mydict:
if item in Cost_Centre and Rate == "0":
Ex_VAT += Ex_VAT
VAT+= VAT
In_VAT = Ex_VAT + VAT
elif item in Cost_Centre and Rate == "20":
Ex_VAT += Ex_VAT
VAT+= VAT
In_VAT = Ex_VAT + VAT
OutputFile.write(",".join([Cost_Centre,Rate,Ex_VAT,VAT,In_VAT+"\n"]))
OutputFile.close()
print "Finished."
sys.exit()

该脚本有效,但我距离获得期望的结果还很远。正如您所发现的,我不太擅长 python,所以如果您可以对脚本进行修改并向我提供整个脚本,请对我的内容进行一些解释,而不是仅仅指出错误,我将不胜感激。我做错了。

最佳答案

您可以使用itertools.groupby。我写了这篇文章,不幸的是它不容易阅读。

import csv
import itertools

csvreader = csv.reader(open("Book1.csv", "r"))
lines = [line for line in csvreader]

#Sort
lines = sorted(lines[1:], key = lambda x: (x[4], x[3], x[2]))

#Grouping
newRows = []
for grp in itertools.groupby(lines, key = lambda x: (x[2], x[3], x[4])):
newRow = [0, 0] + list(grp[0]) + [0.0, 0.0, 0.0]
for col in grp[1]:
newRow[5] += float(col[5])
newRow[6] += float(col[6])
newRow[7] += float(col[5]) + float(col[6])
newRows.append(newRow)

#Filtering and write csv
with open("Journal.csv", "w") as fp:
csvwriter = csv.writer(fp)
csvwriter.writerow(["Cost Centre", "Tax Rate", "Total Ex VAT", "VAT", "Total In VAT"])
for r in filter(lambda x:x[2].strip() == "4200213", newRows):
csvwriter.writerow(r[3:])

希望对您有所帮助。

关于python - 在 Python 中对 CSV 数据进行分组和子分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23000029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com