首页 > 解决方案 > 如何删除一行中的重复值?

问题描述

我有一个包含数千行的数据框;在每一行中,一些值是重复的。我正在寻找删除这些重复项并仅保留唯一值。

为了说明,这是原始数据:

  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 但它会在列而不是行之间删除重复值。

标签: pythonpandas

解决方案


您可以逐行应用 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 行已经需要半秒)。


推荐阅读