我有一本字典:
d = {"A":1, "B":2, "C":3}
我还有一个 pandas 数据框:
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
我知道可以使用df.col1.map(d)
创建col2
,但是如何同时创建col3
?
最佳答案
您可以在一个函数中创建两列assign
- 首先是map
,第二个是isin
对于转换为整数的 bool 掩码:
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
另一个具有不同 bool 掩码的两步解决方案 - 通过检查不缺失值:
df['col2'] = df.col1.map(d)
df['col3'] = df['col2'].notnull().astype(int)
关于python - 映射字典时在单独的 pandas 列中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53521009/