我有一个数据数据:
Cluster PageId OsId BrowserId
0 0 1005581 11 16
1 0 1016529 11 16
2 0 1016529 11 17 以及包含OsId和BrowserId变量的值组合列表的变量梳:
comb=list(set(product(data['OsId'], data['BrowserId'])))因此,我想创建一个字典,它将梳状列表作为键,PageId作为值。
我试着用这个代码:
comb=list(set(product(data['OsId'], data['BrowserId'])))
dico={}
dico[list('comb')] = list(data['PageId'])但我发现了一个错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/tmp/ipykernel_399512/234824120.py in <module>
2 comb=list(set(product(data['OsId'], data['BrowserId'])))
3 dico={}
----> 4 dico[list('comb')] = list(data['PageId'])
5 get_ipython().run_line_magic('pinfo', 'dico')
TypeError: unhashable type: 'list请你想办法纠正这个错误吗?
谢谢
发布于 2022-03-04 17:10:09
代码中有许多错误。
首先:您使用字符串"comb"而不是列表梳,
第二:dico需要元组(而不是列表)作为键
但最大的问题是,dico是dictionary,而词典不像pandas.DataFrame那样工作,它需要for-loop来单独创建每个项目。
dico = {}
comb = set(product(data['OsId'], data['BrowserId']))
for key in comb:
mask = (data['OsId'] == key[0]) & (data['BrowserId'] == key[1])
values = data[ mask ]
dico[key] = values['PageId'].to_list()但是如果您使用.groupby(...)而不是set(product(...)),可能会更简单。
dico = {}
groups = data.groupby(['OsId', 'BrowserId'])
for key, values in groups:
dico[key] = values['PageId'].to_list()使用这两种方法的完整示例。
结果:dico: {(11, 16): [1005581, 1016529], (11, 17): [1016529]}
import pandas as pd
from itertools import product
data = pd.DataFrame([
[0,1005581,11,16],
[0,1016529,11,16],
[0,1016529,11,17],
],
columns=['Cluster','PageId','OsId','BrowserId']
)
print('\n--- df ---\n')
print(data)
print('\n--- set(product()) ---\n')
dico = {}
comb = set(product(data['OsId'], data['BrowserId']))
for key in comb:
mask = (data['OsId'] == key[0]) & (data['BrowserId'] == key[1])
values = data[ mask ]
print('key:', key)
print(values)
print()
dico[key] = values['PageId'].to_list()
print('dico:', dico)
print('\n--- groups ---\n')
dico = {}
groups = data.groupby(['OsId', 'BrowserId'])
for key, values in groups:
print('key:', key)
print(values)
print()
dico[key] = values['PageId'].to_list()
print('dico:', dico)https://stackoverflow.com/questions/71351594
复制相似问题