我有字典:
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
?
答案 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)