Как видно из заголовка, я пытаюсь выделить все столбцы, кроме одного в DataFrame.set_index.

Я попробовал следующий способ:

df = df.set_index(list(df.columns != 'cus_name'))

cus_name - это серия, которую я хочу исключить. Приведенный выше код вызывает KeyError: True.

list(df.columns != 'cus_name') - это список логических значений [True, True, False, True, True, True, True, True, True, True, True, True], а мне нужен список имен столбцов, кроме cus_name.

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

2
glpsx 8 Июл 2019 в 14:55

4 ответа

Лучший ответ

Попробуй понимание списка

df = df.set_index([c for c in df.columns if c != 'cus_name'])
2
Josef Korbel 8 Июл 2019 в 11:57

С другой стороны,

df = df.set_index(df.columns.drop('cus_name').tolist()))
1
Mark Wang 8 Июл 2019 в 12:02

Нахальный способ добиться этого с помощью операций над множествами:

df.set_index(list(set(df.columns) - {'cus_name'}))
3
DeepSpace 8 Июл 2019 в 11:59

Вы можете использовать pd.Index.difference() здесь с sort=False, если важен порядок:

df=df.set_index(df.columns.difference(['cus_name'],sort=False).tolist())
4
anky_91 8 Июл 2019 в 12:00