计算组合在 Dataframe 列中出现的频率 - Apriori 算法

Posted

技术标签:

【中文标题】计算组合在 Dataframe 列中出现的频率 - Apriori 算法【英文标题】:Count the frequency that a combination occurs in a Dataframe column - Apriori algorithm 【发布时间】:2017-10-14 11:33:25 【问题描述】:

我在搜索组合频率的正确解时遇到了问题。

这是我的代码:

import pandas as pd
import itertools

list = [1,20,1,50]

combinations = []
for i in itertools.combinations(list ,2):
    combinations .append(i)

data = pd.DataFrame('products':combinations)

data['frequency'] = data.groupby('products')['products'].transform('count')

print data

The out is:

    products  frequency
0   (1, 20)     1
1    (1, 1)     1
2   (1, 50)     2
3   (20, 1)     1
4  (20, 50)     1
5   (1, 50)     2

问题是(1, 20)和(20, 1),频率放1但是是相同的组合,必须是2,有没有什么方法可以正确解?

【问题讨论】:

【参考方案1】:

您可以通过使用 apply 和 lambda 对列进行修改来使用 group

import pandas as pd
import itertools

list = [1,20,1,50]

combinations = []
for i in itertools.combinations(list ,2):
    combinations .append(i)

data = pd.DataFrame('products':combinations)

data['frequency'] = data.groupby(data['products'].apply(
    lambda i :tuple(sorted(i))))['products'].transform('count')

print (data)

输出将是

     products  frequency
0   (1, 20)          2
1    (1, 1)          1
2   (1, 50)          2
3   (20, 1)          2
4  (20, 50)          1
5   (1, 50)          2

【讨论】:

以上是关于计算组合在 Dataframe 列中出现的频率 - Apriori 算法的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个计算数据框列中 ID 频率的列?

如何通过对第 3 列中的值求和,将前 2 列中具有相同值的 Pandas Dataframe 行组合在一起?

计算数据框列中真/假的出现次数

删除在 DataFrame 列中仅出现一次的值

DataFrame groupby 2列并计算第三次出现

计算数据框列中列表中单词的出现次数