我在python的数据框架中有以下列,名为admission:
Patient ID, Regular ward, Semi-intensive, Intensive
1 0 0 0
2 1 0 0
3 0 1 0
4 0 1 0
5 0 0 1
我已经完成了以下转换:
Patient ID, Admission type
1 0
2 1
3 2
4 2
5 3
基本上,为了实现这一转换,我创建了一个名为“No admission”的新列,其中包含1,如果三个列(常规病房、半强化病房、强化病房)为0,则返回0
之后,我将每列中的值映射到一列中,以返回列的名称,而不是0或1
Patient ID, Admission type
1 No admission
2 Regular ward
3 Semi-intensive
4 Semi-intensive
5 Intensive
对于不入院=0,普通病房=1,半强化病房=2,强化病房=3,再次进行映射
下面是我的完整代码转换
df['No admission'] = None
admission= df.iloc[:,3:6] # Selecting only the three columns mentioned above.
for row in df.index:
if admission.apply(any,axis=1).values[row]:
df.loc[row,'No admission'] = 0
else:
df.loc[row,'No admission'] = 1
cols = [4,5,6,106]
df.insert(loc = 1,
column = 'Admission type',
value = df.iloc[:,cols].apply(np.argmax, axis=1))
df.drop(df.columns[cols],axis=1,inplace=True)
le = LabelEncoder()
le.fit(df['Admission type'])
df['Admission type'] = le.transform(df['Admission type'])
关键是:我的原始数据集有5644行和111列。解释上述内容的执行时间大约为10分钟
我知道这是一个更好的方法来改善它,我感谢任何帮助
这是假设没有患者有两种入院类型。如果创建此列只需要常规列、半列和密集列,则不必复制df,只需直接更改df即可
编辑:另外,我假设“patient”是索引列。如果它是自己的专栏,只需不将其作为“准入”df切片的一部分,它仍然可以工作
您可以使用
dot
将列名合并到每个1
中,并从中创建一个新的数据帧使用
np.where()
如何提高性能?我想会快得多输入:
代码:
输出:
相关问题 更多 >
编程相关推荐