Я пытаюсь извлечь словарь из фрейма данных без дубликатов.
Вот фрейм данных:
{'Country': {0: 'Japan', 1: 'China', 2: 'USA', 3: 'Russia', 4: 'Japan',
5: 'Japan', 6: 'China'}, 'Port': {0: 'Yokohama', 1: 'Ningbo', 2:
'Baltimore', 3: 'Moscow', 4: 'Tokyo', 5: 'Tokyo', 6: 'Shanghai'}}
Я установил страны в качестве ключей и удалил дубликаты. Теперь мне нужно удалить дубликаты из списка.
import pandas as pd
a = {'Country': {0: 'Japan', 1: 'China', 2: 'USA', 3: 'Russia', 4: 'Japan',
5: 'Japan', 6: 'China'}, 'Port': {0: 'Yokohama', 1: 'Ningbo', 2:
'Baltimore', 3: 'Moscow', 4: 'Tokyo', 5: 'Tokyo', 6: 'Shanghai'}}
a_dict=a.groupby(['Country'])['Port'].apply(list).to_dict()
print(a_dict)
Выход:
{'China': ['Ningbo', 'Shanghai'], 'Japan': ['Yokohama', 'Tokyo',
'Tokyo'], 'Russia': ['Moscow'], 'USA': ['Baltimore']}
Ожидаемый результат:
{'China': ['Ningbo', 'Shanghai'], 'Japan': ['Yokohama', 'Tokyo'],
'Russia': ['Moscow'], 'USA': ['Baltimore']}
GroupBy.apply
с set
df.groupby('Country')['Port'].apply(set).map(list).to_dict()
Если вам все равно, что ваш вывод представляет собой список списков или наборов, это упростит до
df.groupby('Country')['Port'].apply(set).to_dict()
defaultdict
from collections import defaultdict
d = defaultdict(set)
for c, p in zip(df['Country'], df['Port']):
d[c].add(p)
{k: list(v) for k, v in d.items()}