创建一个对 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 天销售交易的函数的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

CCF——折点计数(2016-4)

CCF - 201604-1 - 折点计数

CCF 201604-1折点计数 (水题,暴力)

如何获得每月的销售额?

CCF CSP 201604-1 折点计数

pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动标准差(rolling std)例如,计算某公司的多个店铺每N天(5天)的滚动销售额标准差