Как удалить столбцы с повторяющимися значениями во всех строках в пандах

Я хотел бы удалить из моего фрейма данных столбцы с повторяющимися значениями во всех строках.

У меня такой фрейм данных:

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


person data_b77    schedule 26.06.2019    source источник
comment
Я видел drop_duplicates, но он работает для строк, и аргумента оси нет. Может быть, есть аналог этой функции для столбцов?   -  person data_b77    schedule 26.06.2019


Ответы (1)


Сначала транспонируйте, затем удалите дубликаты во всех строках и, наконец, транспонируйте обратно:

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 и отфильтруйте по _3 _ с обратной маской с ~ и _5 _:

test_df = test_df.loc[:, ~test_df.apply(tuple).duplicated()]
person jezrael    schedule 26.06.2019