【问题标题】:More Efficient Way to Make Ordinal Dummy Columns in Pandas?在 Pandas 中制作有序虚拟列的更有效方法?
【发布时间】:2020-07-29 21:34:42
【问题描述】:

您好,我正在做一个以疾病阶段作为分类变量的分类模型。 这是一个值计数的示例:

  • N0 - 720520
  • NX - 320115
  • N1 - 234552
  • N2 - 68529
  • N3 - 48976

(注:NX表示未测量)

我正在制作阶段虚拟变量,以便将当前以及之前通过的阶段设置为 1。

我的问题是我为此创建的代码是否可以写得更好。首先,我使用函数设置每一列的值。

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

感谢任何有关此过程如何减少代码的输入!谢谢。

【问题讨论】:

  • 类似pd.get_dummies(df['N'])?

标签: python pandas dummy-variable


【解决方案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]]

    N  N1  N2  N3  NX
0  N0   0   0   0   0
1  N1   1   0   0   0
2  NX   0   0   0   1
3  N2   1   1   0   0
4  N3   1   1   1   0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 2016-01-15
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2020-11-25
    • 1970-01-01
    相关资源
    最近更新 更多