我有一个包含数千行的数据框;在每一行中,一些值是重复的。我希望删除这些重复项,只保留唯一值。
为了说明,这是原始数据:
Column 1 Column 2 Column 3
0 A B A
1 D C C
2 E E E
3 F G H
成:
Column 1 Column 2 Column 3
0 A B
1 D C
2 E
3 F G H
我尝试过应用df.drop_duplicates,但它会在列而不是行中删除重复值。
答案 0 :(得分:10)
您可以逐行应用drop_duplicates:
df.apply(lambda x: x.drop_duplicates(), axis=1)
Column_1 Column_2 Column_3
0 A B NaN
1 D C NaN
2 E NaN NaN
3 F G H
编辑:
根据DeepSpace的建议,我做了一些时间来确定应用pd.Series.drop_duplicates是否比使用lambda更快。
df = pd.DataFrame({'Column_1':np.random.randint(1,10,10**4),
'Column_2':np.random.randint(1,10,10**4),
'Column_3':np.random.randint(1,10,10**4)})
%timeit df.apply(lambda x: x.drop_duplicates(), axis=1)
435 ms ± 8.24 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit df.apply(pd.Series.drop_duplicates, axis=1)
443 ms ± 15.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
不幸的是,两种解决方案都相当缓慢(1000行已占用半秒)。