计算组合在 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 算法的主要内容,如果未能解决你的问题,请参考以下文章