根据前4个字母从Python中的数组中删除重复项

时间:2017-06-13 20:21:08

标签: python arrays pandas

我有一个邮政编码列表,例如

DD1 1DB
DD1 5PH
DD10 8JG
DD10 9LJ

我想做的是保留第一位代表,具体取决于邮政编码的第一部分,例如

我需要保留:

DD1 1DB
DD10 8JG

我正在使用pandas并将包含列POSTCODES的file.csv导入为:

df = pandas.read_csv('file.csv')
pc = df.POSTCODES

现在我完全卡住了。我设法使用Excel工作(这是更好的选择吗?)但我想学习python并决定看看我是否可以在python中完成它。

3 个答案:

答案 0 :(得分:4)

您可以使用df['POSTCODES'].str[:4]获取前四个字符, 并使用duplicated method来识别重复项:

In [89]: df.loc[~df['POSTCODES'].str[:4].duplicated(keep='first')]
Out[89]: 
  POSTCODES
0   DD1 1DB
2  DD10 8JG

由于duplicated(keep='first')将重复标记为True,因此我们希望保留的行将标记为False。因此,要选择df.loc的假行,~将用于invert the boolean Series

答案 1 :(得分:2)

pc[~pc.POSTCODES.str.split(' ', expand=True)[0].duplicated()]

正如piRSquared在评论中所暗示的那样:

pc[~pc.POSTCODES.str.split().str[0].duplicated()]

输出:

  POSTCODES
0   DD1 1DB
2  DD10 8JG

答案 2 :(得分:0)

In[24]: f = '''\
   ...: DD1 1DB
   ...: DD1 5PH
   ...: DD10 8JG
   ...: DD10 9LJ'''.split('\n')
In[25]: d = {}
   ...: for line in f:
   ...:     left, right = line.split()
   ...:     if left not in d:
   ...:         d[left] = right
   ...: 
In[26]: d
Out[26]: {'DD1': '1DB', 'DD10': '8JG'}