创建一个对3天销售交易进行求和并对3天的销售交易进行计数的函数的最佳方法是什么


with open('POS.csv') as csvfile:
my_reader = csv.reader(csvfile, delimiter=',')
fricnt = 0
satcnt = 0
suncnt = 0
sun = 0
door = 0
hdr = []
sales = 0
frisales = 0
satsales = 0
sunsales = 0
total = 0
totcnt = 0
for row in my_reader:
if door == 0:
hdr.append(row)
door = 1
elif row[21] == 'Friday':
frisales = frisales + float(row[11])
fricnt += 1
elif row[21] == 'Saturday':
satsales = satsales + float(row[11])
satcnt += 1
elif row[21] == 'Sunday':
sunsales = sunsales + float(row[11])
suncnt += 1
total = frisales + satsales + sunsales
totcnt = fricnt + satcnt + suncnt
print('3-day Total Sales:', total, '3-day Average Sale:', total/totcnt)

我正在尝试创建一个函数,对3天的销售额交易进行求和,并对3天销售交易进行计数。我知道这应该很简单,但我是编程新手,可能需要一些帮助。

在整个文件完成之前不要计算总数。你可以用字典来追踪你的销售额。

with open('POS.csv') as csvfile:
my_reader = csv.reader(csvfile)
door = 0
hdr = []
sales = {
'Friday': 0,
'Saturday': 0,
'Sunday': 0
}
counts = {
'Friday': 0,
'Saturday': 0,
'Sunday': 0
}
for row in my_reader:
if door == 0:
hdr.append(row)
door = 1
elif row[21] in sales:
sales[row[21]] += float(row[11])
counts[row[21]] += 1
total = sales['Friday']+sales['Saturday']+sales['Sunday']
totcnt = counts['Friday']+counts['Saturday']+counts['Sunday']
print('3-day Total Sales:', total, '3-day Average Sale:', total/totcnt)

尽管现在我在考虑这个问题,但如果你不需要单独的一天总数,就没有必要保留三个单独的小计。把它们都堆在一个变量里。

考虑使用convtools库,它提供了许多数据处理原语:

from convtools import conversion as c
from convtools.contrib.tables import Table

rows = (
Table.from_csv("POS.csv", header=False)
.update(COLUMN_11=c.col("COLUMN_11").as_type(float))
.filter(c.col("COLUMN_21").in_({"Friday", "Saturday", "Sunday"}))
.into_iter_rows(list)
)
# this is where code generation happens, store for further reuse if needed
converter = c.aggregate(
{
"total": c.ReduceFuncs.Sum(c.item(11)),
"average": c.ReduceFuncs.Average(c.item(11)),
}
).gen_converter()
converter(rows)

如果需要每天的统计数据,您可以省略按一周中的几天进行过滤,并进行如下处理:

converter = c.aggregate(
{
"day_to_sales": c.ReduceFuncs.DictSum(c.item(21), c.item(11)),
"day_to_count": c.ReduceFuncs.DictCount(c.item(21), c.item(11)),
}
).gen_converter()

这里day_to_sales是dict,其中键是一周中的几天,值是销售额的总和。

此外,由于您使用的是货币,请考虑使用decimal.Decimal

最新更新