У меня есть следующая проблема с ограничением, что у меня нет доступа к import pandas
или чему-либо, кроме стандартных библиотек.
Словарь с ID-type1 : метка.
{'ID1': 'Label1',
'ID2': 'Label2',
'ID3': 'Label2',
'ID3': 'Label3',
'ID4': 'Label1',
'ID5': 'Label4'...}
Список 3-кортежей с ID-type1, ID-type2, Val. Каждый идентификатор имеет тысячи уникальных значений.
[('ID1', 'ID_Type2_1', 0.3695652173913043),
('ID1', 'ID_Type2_2', 0.35714285714285715),
('ID1', 'ID_Type2_3', 0.4146341463414634),
('ID2', 'ID_Type2_1', 0.3125),
('ID2', 'ID_Type2_2', 0.4418604651162791),
('ID2', 'ID_Type2_3', 0.34285714285714286),
('ID3', 'ID_Type2_5', 0.35714285714285715),
('ID3', 'ID_Type2_3', 0.3488372093023256),
('ID3', 'ID_Type2_2', 0.3958333333333333)...]
Если бы словарь был кадром данных с именем A (3 столбца), а список — кадром данных с именем B (2 столбца). Я хотел бы сделать следующую псевдологику.
Прикрепить метку к списку кортежей.
C = left_join(A, B, on =ID-type1)
Затем выберите режим (метку) для каждого ID-type2 среди строк, соответствующих m верхним значениям в столбце Val
, или, другими словами, сгруппируйте по ID-type-2, затем сохраните только верхние m
(целочисленные) строки на основе Val
столбец, затем выберите режим/наиболее распространенное значение столбца label
.
C.groupby(ID_type-2).arrange(Val).select(rank = n()).filter(rank <= m).select(mode(label))
Другими словами, желаемый результат — это список кортежей с (ID-type2, Label)
редактировать: я думаю, что первый шаг можно сделать с чем-то вроде этого? Но второй шаг - сложная часть
from collections import defaultdict
dd = defaultdict(list)
for d in (d1, labels): # you can list as many input dicts as you want here
# d.iteritems() in 2.0
for key, value in d.items():
dd[key].append(value)
m
и как фильтровать на его основе? - person Sven Harris   schedule 16.10.2018Val
и соответствующие имlabel
. - person Vlo   schedule 16.10.2018