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

时间:2018-08-10 08:42:34

标签: python python-3.x pandas numpy

我有一个数据框样本:

       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

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

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

但显然会导致语法错误,因为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

有什么方法可以达到相同的目的?

2 个答案:

答案 0 :(得分:2)

仅返回该列而不是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']

答案 1 :(得分:1)

您可以为此目的使用pd.Series.mask

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

有些令人困惑的是,您必须记住pd.Series.mask在满足条件时更新值,而pd.Series.where在满足 条件时更新值。

>