代码之家  ›  专栏  ›  技术社区  ›  Bartek Malysz

如果条件失败,则np.where()不执行任何操作

  •  2
  • Bartek Malysz  · 技术社区  · 6 年前

    我的数据框中有一个示例:

           Created      Insert Time   MatchKey              In Previous    New Type
    18593  2016-08-12   2018-02-19    LXGS090393APIN040640       No        New Existing
    5517   2016-08-12   2018-02-19    LIN380076CI166203726       No        New Existing
    2470   2018-02-12   2018-02-19    CI164414649APIN160672      No        New Existing
    13667  2016-08-12   2018-02-19    LIN257400APIN015446       Yes        New Existing
    10998  2016-08-12   2018-02-19    LXSV225786APIN158860      Yes        New Existing
    20149  2016-08-12   2018-02-19    LIN350167APIN158284       Yes        New Existing
    20143  2016-08-12   2018-02-19    LIN350167APIN161348       Yes        New Existing
    30252  2016-08-12   2018-02-19    LXGS120737APIN153339      Yes        New Existing
    12583  2016-08-09   2018-02-19    WIN556410APIN157186       Yes        New Existing
    28591  2018-05-03   2018-02-19    CI195705185APIN009076      No        New Created
    

    我想取代价值观 列,如果条件失败,则函数不执行任何操作:

    current['New Type'] = np.where(current['In Previous']=='Yes','In Previous',pass)
    

    但很显然,它会导致语法错误,因为np.where()无法处理 通过 :

    File "<ipython-input-9-7f68cda12cbe>", line 1
    current['New Type'] = np.where(current['In Previous']=='Yes','In Previous',pass)
    
                                                                              ^
    SyntaxError: invalid syntax
    

    有什么办法可以达到同样的效果呢?

    2 回复  |  直到 6 年前
        1
  •  2
  •   EdChum Yuriy    6 年前

    只需返回列而不是 pass 这就等于当情况是 False :

    current['New Type'] = np.where(current['In Previous']=='Yes','In Previous',current['New Type'] )
    

    current['New Type'] = current.loc[current['In Previous']=='Yes', 'In Previous']
    
        2
  •  1
  •   jpp    6 年前

    你可以用 pd.Series.mask 正是为了这个目的:

    df['New Type'].mask(df['In Previous']=='Yes', 'In Previous', inplace=True)
    

    有点困惑,你必须记住 满足条件时更新值,而 pd.Series.where 当条件为 遇见。