根据pandas中的参数将列的值更改为1或0

时间:2018-10-04 15:27:49

标签: python python-3.x pandas

因此,我有一个包含很多列的数据框,以示例为例:

id   Status   Name   Age   Job
213  Active   John   39    Unavailable
415  Inactive Sara   34    Unavailable
941  Inactive Micky  11    Unavailable
993  Active   Zack   45    Unavailable

我想做的是使用pandas库将一个人的状态为活动的值分配给job列,如果不活动的状态为0赋值,所以原始数据帧变为:

id   Status   Name   Age   Job
213  Active   John   39    1
415  Inactive Sara   34    0
941  Inactive Micky  11    0
993  Active   Zack   45    1

然后根据状态分别为活动还是不活动将状态列的值更改为1和0。

id   Status   Name   Age   Job
213    1      John   39    Unavailable
415    0      Sara   34    Unavailable
941    0      Micky  11    Unavailable
993    1      Zack   45    Unavailable

我在他们的文档中读了很多东西,但是他们并没有真正明确声明这种操作。我也想分开制作。

3 个答案:

答案 0 :(得分:4)

使用eq

df.assign(Job=df.Status.eq('Active').astype(int))

    id    Status   Name  Age  Job
0  213    Active   John   39    1
1  415  Inactive   Sara   34    0
2  941  Inactive  Micky   11    0
3  993    Active   Zack   45    1

答案 1 :(得分:3)

有很多方法可以做到这一点。我喜欢map

df['Job'] = df.Status.map({'Active':1, 'Inactive':0})
>>> df
    id    Status   Name  Age  Job
0  213    Active   John   39    1
1  415  Inactive   Sara   34    0
2  941  Inactive  Micky   11    0
3  993    Active   Zack   45    1

由于只有2个选项(ActiveInactive),因此您也可以使用np.where

df['Job'] = pd.np.where(df.Status == 'Active', 1, 0)

答案 2 :(得分:3)

由于您处于活动状态或非活动状态,因此您也可以使用pd.get_dummies。在较大的DataFrames上可能要快一点。

import pandas as pd
df['Job'] = pd.get_dummies(df.Status)['Active']
#    id    Status   Name  Age  Job
#0  213    Active   John   39    1
#1  415  Inactive   Sara   34    0
#2  941  Inactive  Micky   11    0
#3  993    Active   Zack   45    1