在包含每日销售额的python DataFrame中计算每周出现的国家/地区代码

9gm1akwq  于 2023-03-13  发布在  Python
关注(0)|答案(1)|浏览(157)

我正在使用python分析一个销售数据集的数据。这个数据集由两列组成,分别是交易日期和相应的国家代码。这个数据集是一个panda DataFrame,它是基于两个较小的数据集的列创建的,这两个较小的数据集具有不同的列名,如下图所示:

frames_f, frames_l = get_sales_frames(True)
    sales_f = frames_f[['Transaction Date', 'Buyer Country']]
    sales_l = frames_l[['Order Charged Date', 'Country of Buyer']]
    
    sales_l.columns = sales_f.columns
    sales = pd.concat([sales_f, sales_l])
    sales['Transaction Date'] = pd.to_datetime(sales['Transaction Date'], infer_datetime_format=True)

数据集包含7个月内 * 每天 * 的购买数据。为了分析数据,我需要计算每个国家 * 每周 * 的购买数量。
首先,我尝试寻找类似的问题,在那里我找到了一个答案,它对我有所帮助,建议使用一个额外的1列和使用.sum(),它给了我以下内容:

sales['Purchases'] = 1
    
    purchases = sales.groupby(['Transaction Date', 'Buyer Country'])['Purchases'].sum()
    print(purchases)

这将给出以下输出:

Transaction Date  Buyer Country
2021-06-01        US               2
2021-06-02        GB               1
                  IL               1
                  SE               1
                  US               7
                                  ..
2021-12-29        US               7
2021-12-30        CA               1
                  US               4
2021-12-31        GB               1
                  US               7

现在,这对我帮助很大,但是我需要每周而不是每天的计数。我希望结果看起来像这样,但是每个国家的计数在交易日期的每个星期都要计数。
实现这一目标的最有效方式是什么?
除了建议使用添加的“购买”列外,我还尝试(可能是错误的方式)使用df.groupby(pd.Grouper(key='Transaction Date', freq="W")).count(),但没有任何运气,因为它会计算每周购买的所有示例,与国家无关。

whhtz7ly

whhtz7ly1#

尝试以下方法:首先分配一周,然后继续每周的总购买量。

sales['Week'] = sales['Transaction Date'].apply(lambda x: x.isocalendar()[1])
weekly_purchases = sales.groupby(['Week', 'Buyer Country'])['Purchases'].sum()

相关问题