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)
实现相同目标的替代方法是什么?
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)
您可以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更新的值时,条件并不满足。