首页 > 解决方案 > 从 panda df 创建一个矩阵以显示 Disease_Symptom 之间的预测

问题描述

大家好,我是python数据帧的初学者::

我在熊猫中有我的数据框,如下格式标题[疾病,症状]

    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

如果有人帮助我,非常感谢!谢谢。

标签: pythondataframematrix

解决方案


您可以通过pandas.get_dummiespandas.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().


推荐阅读