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

Я имею в виду что-то вроде этого:

У меня есть DataFrameсо столбцами, которые могут быть категорическим или именным. Для каждого наблюдения (строки) я хочу создать новую строку, в которой каждое возможное значение переменных теперь является собственной двоичной переменной. Например, эта матрица (первая строка — метки столбцов)

'a'     'b'     'c'
one     0.2     0
two     0.4     1
two     0.9     0
three   0.1     2
one     0.0     4
two     0.2     5

будет преобразована во что-то вроде этого:

'a'              'b'                                                    'c'
one  two  three  [0.0,0.2)  [0.2,0.4)  [0.4,0.6)  [0.6,0.8)  [0.8,1.0]   0   1   2   3   4   5

 1    0     0        0          1          0          0          0       1   0   0   0   0   0
 0    1     0        0          0          0          0          1       0   1   0   0   0   0
 0    1     0        0          0          0          0          1       1   0   0   0   0   0
 0    0     1        1          0          0          0          0       0   0   1   0   0   0
 1    0     0        1          0          0          0          0       0   0   0   0   1   0
 0    1     0        0          1          0          0          0       0   0   0   0   0   1

Каждая переменная (столбец) в исходной матрице объединяется во все возможные значения. Если он категориальный, то каждое возможное значение становится новым столбцом. Если это число с плавающей запятой, то значения каким-то образом группируются (скажем, всегда разбиваются на 10 ячеек). Если это int, то это может быть любое возможное значение int или, возможно, также binning.

К вашему сведению: в моем реальном приложении таблица содержит до 2 миллионов строк, а полная «расширенная» матрица может содержать сотни столбцов.

Есть ли простой способ выполнить эту операцию?

Отдельно я также хотел бы пропустить этот шаг, так как на самом деле я пытаюсь вычислить таблицу Берта (которая представляет собой симметричную матрицу кросс-таблиц). Есть ли простой способ сделать что-то подобное с функцией crosstab? В противном случае вычисление кросс-табуляции представляет собой простое умножение матриц.

8
задан piRSquared 4 January 2017 в 13:09
поделиться