基于2个元素的列表重复删除列表

Adr*_*o10 3 python csv pandas

我有一个列表列表,如下所示:

[[Joel,Green,597], [Katie,Higgins,623], [Joel,Green,123], ...]
Run Code Online (Sandbox Code Playgroud)

我想通过查看名称和姓氏来删除列表中的元素(应该删除具有相同名称和姓氏的元素).在上面的示例中,结果列表应仅包含:

[[Katie,Higgins,623]]
Run Code Online (Sandbox Code Playgroud)

我尝试了下面的代码,但只有当某些列表的所有三个元素都相同时才执行重复删除:

newlist = []
reader = csv.reader(f,delimiter=",")  # read content
my_list = list(reader) #put content in my_list
for i in my_list:
    if i not in newlist:
        newlist.append(i)
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

Max*_*axU 9

使用DataFrame.drop_duplicates:

pd.read_csv(filename, header=None, names=['first','last','val']) \
  .drop_duplicates(['first','last'], keep=False) \
  .values.tolist()
Run Code Online (Sandbox Code Playgroud)

来自docs:

keep : {‘first’, ‘last’, False}, default ‘first’

first : Drop duplicates except for the first occurrence.
last : Drop duplicates except for the last occurrence.
False : Drop all duplicates.
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 5

因为你pandas在这里标记是大熊猫的方式,通过使用drop_duplicates

pd.Series(l).apply(pd.Series).drop_duplicates([0,1],keep=False).values.tolist()
Out[1267]: [['Katie', 'Higgins', 623]]
Run Code Online (Sandbox Code Playgroud)

更多信息 :

l=[['Joel','Green',597], ['Katie','Higgins',623], ['Joel','Green',123]]
Run Code Online (Sandbox Code Playgroud)