我有一个数据框样本:
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
有什么方法可以达到相同的目的?
答案 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
在满足 条件时更新值。