【问题标题】:Remove duplicates from dict of lists with pandas使用熊猫从列表中删除重复项
【发布时间】:2019-11-05 20:59:41
【问题描述】:

我正在尝试从没有重复的数据框中提取字典。

这是数据框:

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

【问题讨论】:

    标签: python pandas dataframe dictionary group-by


    【解决方案1】:

    GroupBy.applyset

    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()}
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-07
        • 1970-01-01
        • 2019-04-12
        • 2019-11-13
        • 2020-02-20
        • 2016-09-03
        • 1970-01-01
        相关资源
        最近更新 更多