You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Pandas DataFrame中按周统计各国代码的购买次数?

问题描述

我正在使用Python分析销售数据集,该数据集包含交易日期和购买对应的国家代码两列,由两个列名不同的小数据集合并而来,代码如下:

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个月的每日购买数据,我需要统计每周每个国家的购买次数。目前已实现按天统计的功能,代码及输出如下:

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(),但该方法仅统计每周总购买量,未按国家分组。请问最有效的实现方法是什么?


解决方案

只需在groupby中同时传入按周聚合的日期分组器和**Buyer Country列**,即可实现每周+国家的双重分组统计,输出格式与日统计完全一致。

核心代码

sales['Purchases'] = 1
# 按周+国家分组统计购买次数
weekly_purchases = sales.groupby(
    [pd.Grouper(key='Transaction Date', freq='W'), 'Buyer Country']
)['Purchases'].sum()
print(weekly_purchases)

补充说明

  • pd.Grouper(key='Transaction Date', freq='W')默认以周日作为每周的结束日期,若需调整周结束日,可修改freq参数:比如'W-MON'代表周一为周结束日,'W-FRI'代表周五,以此类推。
  • 若你希望周标签显示为每周的起始日期而非结束日期,可以使用freq='W-MON'结合label='left'参数,例如:
weekly_purchases = sales.groupby(
    [pd.Grouper(key='Transaction Date', freq='W-MON', label='left'), 'Buyer Country']
)['Purchases'].sum()

内容的提问来源于stack exchange,提问作者Dinkleberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:12:13