Как превратить имена столбцов в значения в Панд

#python #pandas

Вопрос:

Я хотел бы превратить имена столбцов в значения. Это делается для создания факторной переменной и определения уровней в качестве имен столбцов. Я надеюсь добиться x2 от x1 . В R это было бы похоже на использование model.matrix() функции

Спасибо

 x1 = pd.DataFrame({'A': [1,0,0],
            'B': [0,1,0],
            'C': [0,1,1]})

x2 = pd.DataFrame({'All': ['A','BC','C']})
 

Комментарии:

1. Почему BC ? Объясните логику вывода

2. тема 1 появляется как в B, так и в C, поэтому для этого необходимо учитывать уровень.

Ответ №1:

Вы также можете использовать понимание списка следующим образом:

 cols = x1.columns.values

x2 = pd.DataFrame({'All': [''.join(cols[x]) for x in x1.eq(1).values]})
 

Или просто:

 x2 = pd.DataFrame({'All': [''.join(x1.columns[x]) for x in x1.eq(1).values]})
 

Результат:

 print(x2)

  All
0   A
1  BC
2   C
 

Комментарии:

1. Это сработало для моих данных. Спасибо!

Ответ №2:

Это один из способов, должно быть более простое решение:

 x1.astype(bool).apply(lambda row: ''.join(x1.columns[row]), axis=1)
 

Ответ №3:

Используйте @ (оператор умножения матрицы), чтобы умножить вектор столбцов на логическую матрицу:

 import pandas as pd

x1 = pd.DataFrame({'A': [1, 0, 0],
                   'B': [0, 1, 0],
                   'C': [0, 1, 1]})

# create result DataFrame
x2 = pd.DataFrame({"all": x1 @ x1.columns})
print(x2)
 

Выход

   all
0   A
1  BC
2   C
 

Комментарии:

1. Должен быть общепринятый ответ, действительно элегантный.