如何使用pandas查找DataFrame中用户购买产品的最常见组合
实现代码及逻辑说明
核心思路是先提取每个用户已购买的产品名称,再统计不同组合的出现频次,取最高值输出即可。
完整可运行代码如下:
import pandas as pd # 示例数据构造,实际使用时替换为pd.read_csv等读你自己的数据文件即可 df = pd.DataFrame({ 'AA': [1, 0, 0, 1, 1], 'BB': [0, 0, 1, 0, 0], 'CC': [1, 1, 0, 1, 1] }) # 提取每行用户的购买产品组合,排序后转元组方便后续统计 df['buy_combo'] = df.apply( lambda row: tuple(sorted([col for col in df.columns if row[col] == 1)), axis=1 ) # 统计各组合购买人数,过滤掉无购买的空组合 combo_count = df['buy_combo'].value_counts().reset_index() combo_count.columns = ['combo', 'count'] combo_count = combo_count[combo_count['combo'].apply(len) > 0] # 取最高频次的组合输出 top = combo_count.iloc[0] combo_name = '和'.join(top['combo']) print(f'最常见组合为产品{combo_name},共有{top["count"]}人购买')
- 如果存在多个并列最高频次的组合,把取数逻辑替换为下面的代码即可:
max_count = combo_count['count'].max() top_combos = combo_count[combo_count['count'] == max_count] for _, item in top_combos.iterrows(): combo_name = '和'.join(item['combo']) print(f'最常见组合为产品{combo_name},共有{item["count"]}人购买')
你给出的示例数据运行后输出结果为:最常见组合为产品AA和CC,共有3人购买,完全匹配需求。
内容的提问来源于stack exchange,提问作者GeoP
相关产品推荐
相关产品推荐

