创建一个对 3 天销售交易求和并计算 3 天销售交易的函数的最佳方法是啥?
Posted
技术标签:
【中文标题】创建一个对 3 天销售交易求和并计算 3 天销售交易的函数的最佳方法是啥?【英文标题】:What would be the best approach to creating a function that does the summing of 3-day sales transactions and counting the 3-day sales transactions?创建一个对 3 天销售交易求和并计算 3 天销售交易的函数的最佳方法是什么? 【发布时间】:2022-01-05 10:46:26 【问题描述】: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 天的销售额交易。我知道这应该很简单,但我是编程新手,需要一些帮助。
【问题讨论】:
【参考方案1】:在整个文件完成之前不要计算总数。而且您可以使用字典来跟踪您每天的销售额。
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)
虽然现在我正在考虑它,但如果您不需要单独的天总计,则无需保留三个单独的小计。只需将它们全部堆放在一个变量中即可。
【讨论】:
嗯我试试这个【参考方案2】:考虑使用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
是一个字典,其中键是星期几,值是销售额的总和。
另外,既然你是在用钱工作,请考虑使用decimal.Decimal
【讨论】:
以上是关于创建一个对 3 天销售交易求和并计算 3 天销售交易的函数的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动标准差(rolling std)例如,计算某公司的多个店铺每N天(5天)的滚动销售额标准差