如何删除熊猫所有行中具有重复值的列

时间:2019-06-26 13:18:04

标签: python pandas dataframe duplicates

我想从所有行中都有重复值的数据框中删除列。

我有这样的数据框:

test =     [('a', 1, 'a', 34, 'b', 34,'a'),
                ('a', 1, 'a', 30, 'v', 30,'a'),
                ('a', 1, 'a', 16, 'a', 16,'a'),
                ('a', 1, 'a', 30, 'a', 30,'a'),
                ('a', 1, 'a', 30, 'v', 30,'a'),
                ('a', 1, 'a', 30, 'd', 30,'a'),
                ('a', 1, 'a', 40, 'a', 40,'a'),
                ('a', 1, 'a', 30, 'a', 30,'a')
                ]
test_df = pd.DataFrame(test, columns=['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7'])

如您所见,列:col1,col3,col4,col6,col7在所有行中都有重复的值,我的例外输出应该是没有重复列的数据帧。更精确地说,我只想保留重复列中的一个,例如col1和col4

1 个答案:

答案 0 :(得分:2)

首先转置,然后删除所有行中的重复项,最后移回:

test_df = test_df.T.drop_duplicates().T
print (test_df)
  col1 col2 col4 col5
0    a    1   34    b
1    a    1   30    v
2    a    1   16    a
3    a    1   30    a
4    a    1   30    v
5    a    1   30    d
6    a    1   40    a
7    a    1   30    a

另一种解决方案是将列转换为元组,调用Series.duplicated并使用~DataFrame.loc的反掩码按boolean indexing进行过滤:

test_df = test_df.loc[:, ~test_df.apply(tuple).duplicated()]