Удалить дубликаты из списка списков с пандами - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь извлечь словарь из фрейма данных без дубликатов.

Вот фрейм данных:

{'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']}

Ответы [ 2 ]

1 голос
/ 24 июня 2019

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()}
1 голос
/ 24 июня 2019

Используйте drop_duplicates вместе с вашим кодом:

d = df.drop_duplicates().groupby(['Country'])['Port'].apply(list).to_dict()

print(d)
{'China': ['Ningbo', 'Shanghai'], 'Japan': ['Yokohama', 'Tokyo'], 
 'Russia': ['Moscow'], 'USA': ['Baltimore']}
...