Pandas与字典操作:如何获取每个key对应的所有唯一value?
实现方案
你可以直接通过pandas内置的分组聚合能力实现,也可以用原生Python逻辑处理,两种常用方法如下:
方法1:pandas原生处理(推荐)
直接用groupby分组后聚合为列表再转字典即可,代码如下:
import pandas as pd df = pd.DataFrame({'id': [1, 2, 3, 1, 2, 3], 'vals': ['a1', 'a2', 'a3', 'a2', 'a2a', 'a3a']}) # 按id分组,把对应vals聚合为列表,再转成字典 result = df.groupby('id')['vals'].agg(list).to_dict() print(result) # 输出和你预期完全一致:{1: ['a1', 'a2'], 2: ['a2', 'a2a'], 3: ['a3', 'a3a']}
如果需要保证同个id下的值是去重后的唯一值,把聚合逻辑调整即可(要保留值出现的顺序就用下方写法,不在意顺序可以直接转set再转list):
result = df.groupby('id')['vals'].agg(lambda x: list(dict.fromkeys(x))).to_dict()
方法2:原生Python实现(不依赖pandas)
如果你不想用pandas的API,直接遍历数据构建字典也可以:
res = {} for key, val in zip(df['id'], df['vals']): if key not in res: res[key] = [] # 要去重的话加个判断:if val not in res[key] 再执行追加 res[key].append(val)
内容的提问来源于stack exchange,提问作者John Stud
相关产品推荐
相关产品推荐

