如何使用python删除重复数据集

时间:2018-12-16 08:16:43

标签: python

我有一个这种格式的数据集,每组数据都由一个唯一的ID(左)和一个供应商(右)组成

 [('SPE8ES18V1039', '3G1W3'), ('SPE8ES18V5065', '3G1W3'), ('SPE8ES19P0173', '3MCV6'), 
  ('SPE8ES19P0661', '0AY99'), ('SPE8ES18TTT9', '3G1W3'), ('SPE8ES18V1039', '3G1W3'), 
  ('SPE8ES19P0173', '3MCV6'), ('SPE8ES19P0661', '0AY99')] 

我想删除重复的集合并获得每个供应商的数量。因此,删除重复项后的输出将如下所示:

3G1W3  ..... 3 
3MCV6  ...... 1 
0AY99 ....... 1

我该如何遍历每个数据集并删除重复项并获得每个供应商ID的计数?

3 个答案:

答案 0 :(得分:3)

将元组列表转换为字典后,您可以尝试使用collections.Counter(),这将为您消除重复的ID。这是因为字典不能有重复的键。然后,您可以只计算字典values()

使用字典的实现:

from collections import Counter

l = [
    ("SPE8ES18V1039", "3G1W3"),
    ("SPE8ES18V5065", "3G1W3"),
    ("SPE8ES19P0173", "3MCV6"),
    ("SPE8ES19P0661", "0AY99"),
    ("SPE8ES18TTT9", "3G1W3"),
    ("SPE8ES18V1039", "3G1W3"),
    ("SPE8ES19P0173", "3MCV6"),
    ("SPE8ES19P0661", "0AY99"),
]

print(Counter(dict(l).values()))
# Counter({'3G1W3': 3, '3MCV6': 1, '0AY99': 1})

您也可以使用setfrozenset删除重复项,因为元组是可哈希的并且比字典小。

使用集合的实现:

print(Counter(y for _, y in frozenset(l)))
# Counter({'3G1W3': 3, '0AY99': 1, '3MCV6': 1})

print(Counter(y for _, y in set(l)))
# Counter({'3G1W3': 3, '0AY99': 1, '3MCV6': 1})

使用operator.itemgetter()map()也可以写得很好:

from operator import itemgetter

print(Counter(map(itemgetter(1), frozenset(l))))
# Counter({'3G1W3': 3, '0AY99': 1, '3MCV6': 1})

print(Counter(map(itemgetter(1), set(l))))
# Counter({'3G1W3': 3, '0AY99': 1, '3MCV6': 1})

注意:之间的主要区别是frozenset是不可变的,而set是可变的。这意味着冻结集的内容在创建后不能更改,而您可以在创建后更改集。

答案 1 :(得分:1)

用于计数缩略语:
您可以使用count:

MyList = ['a','b','c','a','a','c','c'] #YOURDATA
my_dict = {i:MyList.count(i) for i in set(MyList)}
print my_dict     #or print(my_dict) in python-3.x


 Output : {'a': 3, 'c': 3, 'b': 1}

用于删除重复项:

MyList = ['a','b','c','a','a','c','c'] #YOURDATA
MySet = set(MyList)
MyList = list(MySet)
print(MyList)


  Output : ['a','b','c']

您可以先计算重复项,然后使用以下方法删除重复项:)

答案 2 :(得分:1)

您可以这样做

 l = [
        ("SPE8ES18V1039", "3G1W3"),
        ("SPE8ES18V5065", "3G1W3"),
        ("SPE8ES19P0173", "3MCV6"),
        ("SPE8ES19P0661", "0AY99"),
        ("SPE8ES18TTT9", "3G1W3"),
        ("SPE8ES18V1039", "3G1W3"),
        ("SPE8ES19P0173", "3MCV6"),
        ("SPE8ES19P0661", "0AY99"),
    ]

unique = {}
for i in l:
  if i[0] in unique:
    unique[i[0]].append(i[1])
  else:
    unique[i[0]] = [i[1]]

这样做,您将获得一个包含所有值映射的字典。要找到计数,您只需要这个

for j, k in unique.iteritems():
  print "Element %s: %s Count" % (j, len(k))