【发布时间】:2020-05-27 07:59:00
【问题描述】:
我想计算一列中项目对的数量。我为此制定了解决方案,但我想知道是否有更简洁的解决方案。
这是一个例子和我的方法。 我有一个像这样的数据框。
df = pd.DataFrame({'id':[1,1,2,2], 'item':['apple','orange','orange','apple']})
最后,我想知道一起购买最多的物品是什么。因此,在这种情况下,我想得到橙子和苹果一起购买最多的结果。
然后,我根据id 列中的值进行分组。
id_group = df.groupby('id')
然后,为了计算item 列中的项目对数,我制作了如下所示的函数并将其应用于id_group 的item 列。在此之后,我使用sum() 组合了元组列表。最后,我使用Counter() 来计算包含相同项目的对数。
在combos() 中,我使用sorted() 来避免分别计算('apple','orange') 和('orange','apple')。
是否有更好的方法来获得显示有 2 对 ('apple','orange') 或 2 对 ('orange','apple') 的结果
import itertools
from collections import Counter
def combos(x):
combinations = []
num = x.size
while num != 1:
combinations += list(itertools.combinations(x,num))
num -= 1
element_sorted = map(sorted,combinations)
return list(map(tuple,element_sorted))
k= id_group['item'].apply(lambda x:combos(x)).sum()
Counter(k)
【问题讨论】:
标签: python pandas combinations