映射字典时在单独的pandas列中设置值

时间:2018-11-28 13:52:26

标签: python pandas

我有字典:

d = {"A":1, "B":2, "C":3}

我也有一个熊猫数据框:

col1
A
G
E
B
C

我想通过将字典映射到col1来创建新列。同时,我想在另一列中设置值以指示该行中的值是否已映射。所需的输出如下所示:

col1    col2    col3
A       1       1
G       NaN     0
E       NaN     0
B       2       1
C       3       1

我知道可以使用col2创建df.col1.map(d),但是如何同时创建col3

1 个答案:

答案 0 :(得分:1)

您可以在一个函数assign中创建两个列-首先由map创建,然后由isin创建布尔掩码并将其强制转换为integers

df = df.assign(col2=df.col1.map(d), col3=df.col1.isin(d.keys()).astype(int))
print (df)
  col1  col2  col3
0    A   1.0     1
1    G   NaN     0
2    E   NaN     0
3    B   2.0     1
4    C   3.0     1

另一种具有不同布尔掩码的两步解决方案-通过检查是否缺少值:

df['col2'] = df.col1.map(d)
df['col3'] = df['col2'].notnull().astype(int)