问题描述
所以我有这个包含很多列的数据框,例如看看这个:
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库为作业列分配值1如果一个人的状态是活动的,如果它是非活动的则为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
如果status分别处于活动或非活动状态,则将status列的值更改为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
我在他们的文档中读了很多,但他们并没有真正明确地声明这样的操作。 我也希望将这些单独制作。
1楼
使用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
2楼
有很多方法可以做到这一点。
我喜欢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个选项( Active
或非Inactive
),您还可以使用np.where
:
df['Job'] = pd.np.where(df.Status == 'Active', 1, 0)
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