#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. большое вам спасибо за его рабочий%… #Шри Рагу Малиредди