Преобразование фрейма данных pandas в матрицу из 1 и 0 для присутствия / отсутствия

#python #pandas #dataframe #matrix

#python #pandas #фрейм данных #матрица

Вопрос:

У меня есть данные, которые выглядят так, что я импортировал с помощью pandas в python:

 new_id  code
001722  A01.09
001723  A01.09
001723  A02.0
001724  A02.9
001724  A03.9
001725  A03.9
 

И я хотел бы преобразовать это в матрицу из 1 и 0 для присутствия / отсутствия, предполагая также использование pandas, чтобы выглядеть так:

 new_id  A01.09  A02.0  A02.9  A03.9
001722       1      0      0      0
001723       1      1      0      0
001724       0      0      1      1
001725       0      0      0      1
 

Я должен сделать это для разных типов данных. «код» здесь — это только один тип данных, который мне нужно преобразовать. Итак, как только у меня будут эти матрицы, я также хотел бы объединить их в одну большую матрицу, используя «new_id» в качестве объединяющего столбца, добавив новые данные справа от матрицы.

Я сделал это на R, однако мне нужно сделать это на python по ряду причин, и я новичок в этом языке.

Ответ №1:

Возможно, вы захотите использовать сводную таблицу:

 df['COUNT'] = 1
print(df.pivot_table('COUNT', index='new_id', columns="code").fillna(0))
 

(хотя, если вы хотите придерживаться целых чисел, вам придется добавить ‘.astype (int)’ к последней строке: перед заполнением данных 0 вы получите значения «1» и «NaN», которые преобразуются в float64 из-за «NaN»)

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

1. Итак, если я хочу сохранить файл, я бы сделал: df[‘COUNT’] = 1 new_file = df.pivot_table(‘COUNT’, index=’new_id’, columns=»code»). fillna(0).astype(int) ?

2. Да, это сработало! Большое спасибо! Как бы мне теперь объединить похожие матрицы, используя «new_id» в качестве объединяющего столбца?

3. Используйте pandas merge (если вы «объединяете» столбцы, которые не являются индексами) или join (для работы непосредственно с индексами, как вы могли бы в этом случае).

4. Большое спасибо за помощь. Это на удивление проще, чем было в R!