如何合并DataFrame中互为倒序的bigram并对其Frequency字段求和?
解决方案
错误原因
- 你的
Bigram列存储的是元组类型,不存在字符串的split方法,调用该方法会直接报错 - 你编写的
remove_duplicates是字典遍历逻辑,但apply作用在Bigram列的单个元组元素上,试图用字符串索引元组自然会触发TypeError: tuple indices must be integers or slices, not str报错
实现代码
直接通过排序元组生成统一分组键的方式实现倒序二元组的合并,逻辑简单无需额外类型转换:
import pandas as pd # 构造测试样例数据(你自己的代码可以跳过这步,直接用你已有的DataFrame) df = pd.DataFrame({ 'Bigram': [('ice', 'cream'), ('cream', 'sandwich'), ('google', 'android'), ('galaxy', 'nexus'), ('android', 'google')], 'Frequency': [23, 21, 19, 14, 12] }) # 生成统一分组键:正序倒序的二元组排序后得到的元组完全一致 df['group_key'] = df['Bigram'].apply(lambda x: tuple(sorted(x))) # 分组聚合 result = df.groupby('group_key').agg({ 'Bigram': 'first', # 保留首次出现的原始Bigram顺序 'Frequency': 'sum' }).reset_index(drop=True)
如果你希望合并后的二元组统一使用排序后的固定顺序,只需要把
agg里的'Bigram': 'first'替换为'Bigram': lambda x: tuple(sorted(x.iloc[0]))即可。
运行后得到的result就和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者user11530349
相关产品推荐
相关产品推荐

