Python 在Pandas中创建序号伪列的更有效方法?
你好,我正在做一个分类模型,将疾病的阶段作为分类变量。 下面是一个值计数的示例:Python 在Pandas中创建序号伪列的更有效方法?,python,pandas,dummy-variable,Python,Pandas,Dummy Variable,你好,我正在做一个分类模型,将疾病的阶段作为分类变量。 下面是一个值计数的示例: N0-720520 NX-320115 N1-234552 N2-68529 N3-48976 (注:NX表示未测量) 我正在制作stages虚拟变量,以便将当前和以前传递的stages设置为1 我的问题是,我为此创建的代码是否可以编写得更好。首先,我用函数设置每列的值 def N1(row): if row['N'] == 'N1': return 1 if row['N']
- N0-720520
- NX-320115
- N1-234552
- N2-68529
- N3-48976
def N1(row):
if row['N'] == 'N1':
return 1
if row['N'] == 'N2' :
return 1
if row['N'] == 'N3' :
return 1
else:
return 0
def N2(row):
if row['N'] == 'N2' :
return 1
if row['N'] == 'N3' :
return 1
else:
return 0
def N3(row):
if row['N'] == 'N3' :
return 1
else:
return 0
def NX(row):
if row['N'] == 'NX' :
return 1
else:
return 0
然后将这些函数用于:
df['N1'] = df.apply (lambda row: N1(row), axis =1)
df['N2'] = df.apply (lambda row: N2(row), axis =1)
df['N3'] = df.apply (lambda row: N3(row), axis =1)
df['NX'] = df.apply (lambda row: NX(row), axis =1)
最后结果的一个例子:
- NX:0
- N3:0
- N2:1
- N1:1
任何关于此过程可能需要更少代码的输入都将受到赞赏!谢谢。创建所有列的虚拟对象,并删除
'N0'
,因为您不关心该列。然后应用层次结构,如果较高的阶段为1,则将较低的阶段设置为1
import pandas as pd
df = pd.DataFrame({'N': ['N0', 'N1', 'NX', 'N2', 'N3']})
df = pd.concat([df, pd.get_dummies(df['N']).drop(columns='N0')], axis=1)
hierarchy = ['N3', 'N2', 'N1']
for i in range(len(hierarchy)-1):
df[hierarchy[i+1]] += df[hierarchy[i]]
创建所有列的虚拟对象并删除
'N0'
,因为您不关心该列。然后应用层次结构,如果较高的阶段为1,则将较低的阶段设置为1
import pandas as pd
df = pd.DataFrame({'N': ['N0', 'N1', 'NX', 'N2', 'N3']})
df = pd.concat([df, pd.get_dummies(df['N']).drop(columns='N0')], axis=1)
hierarchy = ['N3', 'N2', 'N1']
for i in range(len(hierarchy)-1):
df[hierarchy[i+1]] += df[hierarchy[i]]
类似于
pd.get\u dummies(df['N'])
?类似于pd.get\u dummies(df['N'])
?