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

Bar*_*ysz 5 python numpy python-3.x pandas

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

       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
Run Code Online (Sandbox Code Playgroud)

我想以一种方式替换New Type列中的值,如果条件失败,则该函数不执行任何操作:

current['New Type'] = np.where(current['In Previous']=='Yes','In Previous',pass)
Run Code Online (Sandbox Code Playgroud)

但显然它会导致语法错误,因为 np.where() 不处理pass

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

                                                                          ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

实现相同目标的替代方法是什么?

EdC*_*ica 9

pass当条件为时,只返回列而不是这与什么都不做是一样的False

current['New Type'] = np.where(current['In Previous']=='Yes','In Previous',current['New Type'] )
Run Code Online (Sandbox Code Playgroud)

或者您可以只屏蔽这些行:

current['New Type'] = current.loc[current['In Previous']=='Yes', 'In Previous']
Run Code Online (Sandbox Code Playgroud)


jpp*_*jpp 5

您可以pd.Series.mask完全用于此目的:

df['New Type'].mask(df['In Previous']=='Yes', 'In Previous', inplace=True)
Run Code Online (Sandbox Code Playgroud)

有点混乱的是,你要记住,pd.Series.mask更新的值,当条件满足,而pd.Series.where更新的值时,条件并不满足。