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

使用pandas groupby按周统计各branch共同购买商品组合的出现频率

Pandas 订单组合频次统计实现方案

核心注意点

因为要求订单内元素顺序不影响组合判定,所以聚合时需要先对每个订单的对应字段列表做排序,同时转为可哈希的tuple类型才能用于后续分组计数。

完整实现代码

import pandas as pd

# 构造示例DataFrame(实际使用时替换为你的原始df即可)
data = {
    'date': ['2021-05-04', '2021-06-04', '2021-05-06', '2021-07-06', '2021-07-06', '2021-07-05', '2021-10-04'],
    'category': ['A', 'A', 'B', 'A', 'C', 'A', 'D'],
    'subcategory': ['aa', 'dd', 'aa', 'aa', 'cc', 'ff', 'aa'],
    'order_id': [10, 10, 18, 50, 10, 101, 100],
    'product_id': [5, 2, 3, 10, 15, 30, 15],
    'branch': ['web', 'web', 'shop', 'web', 'web', 'shop', 'shop']
}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])

# 第一步:按订单、分支分组重采样,生成排序后的组合
order_comb = (
    df.set_index('date')
    .groupby(['order_id', 'branch'])
    .resample('W-MON', label='left')
    .agg({
        # 排序后转tuple,消除顺序影响同时满足哈希要求
        'category': lambda x: tuple(sorted(x)),
        'subcategory': lambda x: tuple(sorted(x)),
        'product_id': lambda x: tuple(sorted(x))
    })
    .reset_index()
)

# 第二步:按分支、周分组,统计各组合的出现频次
def count_combination(group):
    result = {}
    for col in ['category', 'subcategory', 'product_id']:
        # 按频次倒序统计
        count_series = group[col].value_counts().sort_values(ascending=False)
        # 转换为要求的「频次, 组合列表」格式
        result[col] = [f"{cnt}, {list(comb)}" for comb, cnt in count_series.items()]
    return pd.Series(result)

stat_result = order_comb.groupby(['branch', 'date']).apply(count_combination)

# 可选:将日期转为列,和你给出的示例展示结构完全一致
stat_result_unstack = stat_result.unstack(level='date')

输出说明

  • 直接查看stat_result即可得到按branch、周分层的统计结果,每个层级下对应category、subcategory、product_id三个维度的频次+组合列表
  • 如果需要提取指定维度的结果,可通过索引直接取值:比如stat_result.loc[('web', '2021-05-04'), 'category']即可拿到web分支对应周的category组合统计列表

内容的提问来源于stack exchange,提问作者Jonas Palačionis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:45:02