我想从所有行中都有重复值的数据框中删除列。
我有这样的数据框:
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
答案 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()]