【问题标题】:Combine values from two columns into third where certain conditions are met in Python using np.where使用 np.where 将两列中的值合并到第三列中,在 Python 中满足某些条件
【发布时间】:2021-05-13 15:48:38
【问题描述】:

在以下示例 df 中,我想仅在 a = 1 时将 col c 和 d 中的值组合成一个新的 col e:

a   c   d   
1   ab  xy
0   cd  zf
0   sd  zk
1   df  sd

我写了以下代码:

df['e'] = np.where(df['a'] == 1, ("ERR: " + df["c"] + " - " + df["d"]', np.NaN)

它不工作。我收到以下错误:TypeError: can only concatenate str (not "map") to str

我可以通过创建一个临时列来解决这个问题,该列将两列中的值组合起来并改用它。但如果可能的话,希望有一种方法可以直接在这里完成。

使用 temp col 的解决方案:

dfCM['b'] = "ERR: " + dfCM["c"] + " - " + dfCM["d"]
df['e'] = np.where(df['a'] == 1, df[b'], np.NaN)

想要的结果:

a   c   d   e
1   ab  xy  ERR: ab-xy
0   cd  zf
0   sd  zk
1   df  sd  ERR: df-sd

谢谢

【问题讨论】:

  • 好的,解决了。问题不在于上面的代码,而是上游的更改在我的数据框的“d”列中插入了“”,这导致了问题。当我使用 dfCM['Sector'] = map(lambda x: x.title(), dfCM['Sector']) 将文本格式化为标题大小写时发生。我现在已经使用 dfCM['Sector'] = dfCM['Sector'].str.title() 虽然不理想,因为它大写连词,但我不再收到错误了。

标签: python numpy where-clause


【解决方案1】:

这似乎有效,

import numpy as np

df['e'] = np.where(df['a'] == 1, "Err :" + df['c'] + "-" + df['d'], np.NaN)

   a   c   d           e
0  1  ab  xy  Err :ab-xy
1  0  cd  zf         NaN
2  0  sd  zk         NaN
3  1  df  sd  Err :df-sd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2013-04-13
    • 2022-01-11
    • 1970-01-01
    • 2022-12-06
    相关资源
    最近更新 更多