删除重复的python/pandas

删除重复的python/pandas,python,pandas,duplicates,Python,Pandas,Duplicates,我有这样的数据: d = {'col1': ['1-2-3', '2-2-3'], 'col2': ['1-2-2-3', '4-4-4']} df = pd.DataFrame(data=d) df col1 col2 0 1-2-3 1-2-2-3 1 2-2-3 4-4-4 我需要删除重复项并保留顺序以实现此目的: col1 col2 0 1-2-3 1-2-3 1 2-3 4 使用 如果顺序很重要,请使用split和d

我有这样的数据:

d = {'col1': ['1-2-3', '2-2-3'], 'col2': ['1-2-2-3', '4-4-4']}
df = pd.DataFrame(data=d)
df

    col1    col2
0   1-2-3   1-2-2-3
1   2-2-3   4-4-4
我需要删除重复项并保留顺序以实现此目的:

    col1    col2
0   1-2-3   1-2-3
1   2-3     4
使用

如果顺序很重要,请使用
split
dict.fromkeys
删除重复项,最后返回:

df = df.applymap(lambda x: '-'.join(dict.fromkeys(x.split('-')).keys()))
print (df)
    col1   col2
0  1-2-3  1-2-3
1    2-3      4
如果顺序不重要,请使用
set
s:

df = df.applymap(lambda x: '-'.join(set(x.split('-'))))
print (df)
    col1   col2
0  3-2-1  3-2-1
1    3-2      4
使用

如果顺序很重要,请使用
split
dict.fromkeys
删除重复项,最后返回:

df = df.applymap(lambda x: '-'.join(dict.fromkeys(x.split('-')).keys()))
print (df)
    col1   col2
0  1-2-3  1-2-3
1    2-3      4
如果顺序不重要,请使用
set
s:

df = df.applymap(lambda x: '-'.join(set(x.split('-'))))
print (df)
    col1   col2
0  3-2-1  3-2-1
1    3-2      4

drop_duplicates是您可以使用的通用API。 但在这种特殊情况下,您可以创建一个临时列,将所有数字作为一个列表。 然后再次将其转换为非重复字符串

df = df.apply(lambda x: x.str.split('-'), axis=1) 
df['col1'] = df['col1'].apply(lambda x: '-'.join((list(dict.fromkeys(x)))) )
df['col2'] = df['col2'].apply(lambda x: '-'.join((list(dict.fromkeys(x)))) )
df

drop_duplicates是您可以使用的通用API。 但在这种特殊情况下,您可以创建一个临时列,将所有数字作为一个列表。 然后再次将其转换为非重复字符串

df = df.apply(lambda x: x.str.split('-'), axis=1) 
df['col1'] = df['col1'].apply(lambda x: '-'.join((list(dict.fromkeys(x)))) )
df['col2'] = df['col2'].apply(lambda x: '-'.join((list(dict.fromkeys(x)))) )
df