首先,我是python的初学者,我遇到了同样的问题,将我的数据csv文件添加到如下格式的pandas dataFrame中
disease symptom frequence
0 d1 s1 Very frequent (99-80%)
1 d1 s2 Very frequent (99-80%)
2 d2 s1 Frequent (79-30%)
3 d2 s3 Very frequent (99-80%)
4 d3 s2 Occasional (29-5%
5 d4 s1 Very frequent (99-80%)
6 d4 s2 Frequent (79-30%)
7 d4 s3 Occasional (29-5%
8 d5 s3 Occasional (29-5%
9 d5 s4 Very frequent (99-80%)
===> d =名称疾病,s =名称症状
我想在ordre中的疾病和症状组之间创建一个矩阵,以预测每种疾病与其症状相关的...。进行数学测试的主要矩阵
我想成为这样:
s1 s2 s3 s4 s5 s6
d1 1 1 0 0 0 0
d2 1 0 1 0 0 0
d3 0 1 1 1 1 1
d4 1 0 1 0 0 0
d5 0 0 1 1 0 0
如果d与s相关联,则在矩阵中打印1,而不打印0
我的数据太长了72036行×3列
我根据ysearka的先前答案进行尝试
将熊猫作为pd导入 将numpy导入为np 导入io
data = pd.read_csv("disease_sym_frq_list.csv", sep="[;,]", engine='python')
data
dat_mat= io.StringIO("""\data
""")
mat = pd.read_csv(dat_mat, delim_whitespace=True)
data['norm'] = data.groupby('Disease')['Frequence'].transform('sum')
m = pd.merge(data, mat, left_on='Symptom', right_index=True)
m[mat.index] = m[mat.index].multiply(m['Frequence'] / m['norm'], axis=0)
output = m.groupby('Disease')[mat.index].sum()
output.columns.name = 'Symptom'
print(output)
输出为:
Empty DataFrame
Columns: []
Index: []
我如何解决这个问题
如果有人帮助我非常感谢!谢谢
答案 0 :(得分:0)
您可以简单地使用pandas.DataFrame.pivot
:
df['value'] = 1
df_pivot = df.pivot(index='disease', columns='symptom', values='value').fillna(0)
print(df_pivot)
symptom s1 s2 s3 s4
disease
d1 1.0 1.0 0.0 0.0
d2 1.0 0.0 1.0 0.0
d3 0.0 1.0 0.0 0.0
d4 1.0 1.0 1.0 0.0
d5 0.0 0.0 1.0 1.0
注释:您没有提供完整的dataframe
,这就是为什么输出中不包含s5
,s6
等的原因。