总结数据框中的重复二元组

Sum duplicate bigrams in dataframe

我目前有一个包含以下值的数据框:

        Bigram      Frequency
0   (ice, cream)        23
1   (cream, sandwich)   21
2   (google, android)   19
3   (galaxy, nexus)     14
4   (android, google)   12

我想合并其中的值(如 google、android 和 android、google)还有其他值,如“冰、奶油”和“奶油,三明治”,但这是一个不同的问题。

为了总结我尝试这样做的重复项:

def remove_duplicates(ngrams):
    return {" ".join(sorted(key.split(" "))):ngrams[key] for key in ngrams}

freq_all_tw_pos_bg['Word'] = freq_all_tw_pos_bg['Word'].apply(remove_duplicates)

我环顾四周,发现了类似的练习,这些练习被标记为正确答案,但当我尝试这样做时,我得到:

TypeError: tuple indices must be integers or slices, not str

这是有道理的,但后来我尝试将其转换为字符串,但它以一种奇怪的方式打乱了双字母组,所以我想知道,我是否遗漏了一些应该更容易的东西?

编辑: 输入是我显示的第一个值。一些重复的二元组列表(由于其中的单词被颠倒了。即 google、android 与 android、google

我想要相同的输出(即带有双字母组的数据帧),但它总结了反向单词的频率。如果我从上面获取相同的列表并处理它,那么它应该输出。

        Bigram      Frequency
0   (ice, cream)        23
1   (cream, sandwich)   21
2   (google, android)   31
3   (galaxy, nexus)     14
4   (apple, iPhone)     6

请注意它是如何“合并”(google、android) 和 (android、google) 以及对频率求和的。

如果有 ara 元组使用 sorted 转换为元组:

freq_all_tw_pos_bg['Bigram'] = freq_all_tw_pos_bg['Bigram'].apply(lambda x:tuple(sorted(x)))
print (freq_all_tw_pos_bg)
              Bigram  Frequency
0       (cream, ice)         23
1  (cream, sandwich)         21
2  (android, google)         31
3    (galaxy, nexus)         14
4    (apple, iPhone)          6

然后聚合sum:

df = freq_all_tw_pos_bg.groupby('Bigram', as_index=False)['Frequency'].sum()