Как удалить разные имена столбцов с дублированными значениями? - PullRequest
2 голосов
/ 26 апреля 2020

С учетом этого DF:

a   b   c   d
1   2   1   4
4   3   4   2
foo bar foo yes

Каков наилучший способ удалить те же столбцы, но с другим именем в большом pandas DF? Например:

a   b   d
1   2   4
4   3   2
foo bar yes

Столбец c был удален из указанного выше кадра данных, поскольку a и c - это тот же столбец, но с другим именем. До сих пор я пытался

df = df.iloc[:, ~df.columns.duplicated()]

Однако мне не ясно, как проверить значения строк внутри DF?

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

IIU C

df.loc[:,~df.T.duplicated()]
     a    b    d
0    1    2    4
1    4    3    2
2  foo  bar  yes
1 голос
/ 26 апреля 2020

используйте transpose как показано ниже

df.T.drop_duplicates().T

Я попробовал прямой подход - l oop через имена столбцов и сравнил каждый столбец с остальными другими. Используйте np.all для точного соответствия. Этот подход занял всего 336 мс.

repeated_columns = []
for i, column in enumerate(df.columns):
    r_columns = df.columns[i+1:]
    for r_c in r_columns:
        if np.all(df[column] == df[r_c]):
            repeated_columns.append(r_c)
new_columns = [x for x in df.columns if x not in repeated_columns]
df[new_columns]

Это даст вам следующий результат

     a    b    d
0    1    2    4
1    4    3    2
2  foo  bar  yes
...