【问题标题】:Set value in separate pandas column when mapping dictionary映射字典时在单独的熊猫列中设置值
【发布时间】:2018-11-28 22:05:49
【问题描述】:

我有一本字典:

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

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

【问题讨论】:

  • how can I simultaneously create col3 - 不是 100% 确定你的想法,你能解释更多吗?

标签: python pandas


【解决方案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)

【讨论】:

    猜你喜欢
    • 2021-04-30
    • 2019-07-30
    • 2019-01-02
    • 1970-01-01
    • 2019-09-28
    • 2020-09-25
    • 2014-08-04
    相关资源
    最近更新 更多