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

如何统计同一订单中水果组合的出现频次

如何统计同一订单中水果组合的出现频次

嗨,这个需求其实用 pandas 配合 itertools 就能轻松搞定,我给你一步步拆解下怎么做:

步骤1:准备环境和示例数据

首先我们先导入需要的库,再把你给出的示例数据构造出来:

from itertools import combinations
import pandas as pd

# 构造示例数据,和你提供的一致
df = pd.DataFrame({
    'order': [1,1,1,2,2,2,2,3,3,3],
    'fruit': ['apple','grape','peach','orange','apple','raspberry','peach','apple','peach','orange'],
    'qty': [5,8,3,6,4,3,2,8,6,3]
})

步骤2:生成每个订单内的水果两两组合

这一步是核心:我们按订单分组,对每个订单里的水果列生成不重复的两两组合(用combinations而不是permutations,这样apple/peach和peach/apple会被视为同一个组合,不会重复统计)。同时给每个组合里的水果按字母排序,确保组合的一致性:

# 按order分组,生成每个订单内的有序两两水果组合
combinations_per_order = df.groupby('order')['fruit'].apply(lambda x: list(combinations(sorted(x), 2)))

步骤3:展开组合并统计频次

接下来把每个订单的组合列表拆成单独的行,再把组合转换成字符串格式,最后统计每个组合的出现次数:

# 把嵌套的组合列表展开成单独行
all_combinations = combinations_per_order.explode()

# 将元组形式的组合转换成"水果1/水果2"的字符串格式
all_combinations_str = all_combinations.apply(lambda x: '/'.join(x))

# 统计每个组合的频次,并整理成目标格式
result = all_combinations_str.value_counts().reset_index()
result.columns = ['f', 't']

最终结果

运行完上面的代码后,打印result就能得到你想要的输出:

f  t
0      apple/peach  3
1     apple/orange  2
2  apple/raspberry  1
3     orange/peach  1
4      apple/grape  1
5       grape/peach 1
6  orange/raspberry 1
7  peach/raspberry  1

这个方法简单高效,对于常规规模的数据集完全够用,而且逻辑清晰,容易理解和调整~

备注:内容来源于stack exchange,提问作者teogj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 12:49:29