Создание матрицы из panda df для отображения прогноза между disease_syptom

#python #dataframe #matrix

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

Вопрос:

всем привет, я начинающий в python datafram ::

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

     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:

Вы можете получить это с помощью комбинации 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() .

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

1. кстати, это отличный скрипт …. пожалуйста, как я могу удалить Symptom_ перед именем s, которое отображает s1 или s4 … имя ect без Symptom_thanks

2. Привет, Вы можете сделать это, передав пользовательские параметры в prefix и prefix_sep . Замените код для генерации df_g следующим df_g = pd.get_dummies(df,columns=['Symptom'], prefix=[''], prefix_sep='') . Это должно дать вам желаемый результат. Ссылки на документацию, приведенные в ответе, должны помочь с объяснениями.

3. большое вам спасибо за его рабочий%… #Шри Рагу Малиредди