python - 从 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
如果有人帮助我,非常感谢!谢谢。
解决方案
您可以通过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()
.
推荐阅读
- python - Django:将 .py 文件移动到文件夹中进行整理
- entity-framework-core - LINQ 查询在 FirstOrDefault 方法上引发异常
- oracle - oralce apex_json 提取字段
- volttron - Volttron 进入了一个几乎无止境的循环
- angular8 - 如何向 chrome 指示 Angular 8 中功能模块的下载优先级(低、高或最高)?
- angular - 有没有办法双向绑定jqxComboBox?
- postgresql - Postgres 复制失败“新时间线 y 在当前恢复点之前从当前数据库系统时间线 x 分叉”
- python - 如何建立连接以接收实时股票数据
- laravel - 如何让 Laravel Passport 上的多重身份验证工作?
- django - Django 错误:在 include() 的情况下,视图必须是可调用的或列表/元组