Создание матрицы из panda df для отображения прогноза между Disease_Symptom - PullRequest
0 голосов
/ 21 марта 2019

Привет всем, я начинающий в Python DataFram ::

У меня есть мой dataframe в пандах, как следующий заголовок формата [Болезнь, Симптом]

    Disease     Symptom
   0 di1         sy1
   1 di1         sy4
   2 di1         sy7
   3 di3         sy2
   4 di3         sy4
   5 di3         sy7 

## di = болезнь, sy = симптом

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

ID  s1 s2 s3 s4 s5 s6 s7
di1  1  0  0  1  0  0  0
di2  0  1  0  0  0  1  1
di3  0  1  0  1  0  0  0
di4  0  0  0  0  0  0  1
di5  0  1  0  1  0  0  0

Идея в том, что если одна болезнь встречается с симптомом в матричной печати 1, если она не связана с этим симптомом, напечатайте 0

, если кто-нибудь мне очень поможет!спасибо.

1 Ответ

0 голосов
/ 21 марта 2019

Вы можете получить его комбинацией pandas.get_dummies и pandas.DataFrame.groupby .

Для простоты я создаю свой начальный фрейм данных следующим образом:

>>> df
  Disease Symptom
0      d1      s1
1      d1      s4
2      d1      s7
3      d3      s2
4      d3      s4
5      d3      s7

Я могу использовать метод pd.get_dummies() для создания фиктивных столбцов для функции «Симптомы».

>>> df_g = pd.get_dummies(df,columns=['Symptom'])
>>> df_g
  Disease  Symptom_s1  Symptom_s2  Symptom_s4  Symptom_s7
0      d1           1           0           0           0
1      d1           0           0           1           0
2      d1           0           0           0           1
3      d3           0           1           0           0
4      d3           0           0           1           0
5      d3           0           0           0           1

Теперь я могу упаковать несколько строк, используя df.groupby() в соответствии со значением столбца Disease, и суммировать эти закодированные в горячем виде векторы, чтобы получить конечный желаемый результат.

>>> df_gg = df_g.groupby(['Disease'], as_index=False).sum()
>>> df_gg
  Disease  Symptom_s1  Symptom_s2  Symptom_s4  Symptom_s7
0      d1           1           0           1           1
1      d3           0           1           1           1

Symptom_s3 и Symptom_s5 являются простыми нулевыми столбцами и могут быть добавлены позже. В моем примере df нет s6, чтобы получить столбец через get_dummies().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...