[尝试用np.NaN替换系列的最小值时,我得到了“多个”替换。
我已经尝试使用series.replace方法,但是它会导致在最小时替换所有出现的事件。
例如:
sss = pd.Series([0,0,1,1])
#when calling the replace:
sss = sss.apply(lambda x: x.replace(min(x),np.NaN))
#the output is:
0 NaN
1 NaN
2 1
3 1
#and the desired output is:
0 NaN
1 0
2 1
3 1
因此,从本质上讲,我如何只替换第一次出现的重复最小值?
loc
+ idxmin
[idxmin
返回该序列的最小值的第一次出现的索引。
sss.loc[sss.idxmin()] = np.nan
您可以使用np.where
并添加第二个条件,以使第一个重复值通过duplcated
返回True。
s = pd.Series([0,0,1,1,4])
s = np.where(s.duplicated(keep='last') & s.eq(s.min()), np.nan, s)
s
Out[1]: array([nan, 0., 1., 1., 4.])
如果不重复,则此方法将不会取代您的最小值,而不像使用idxmin
。
s = pd.Series([0,1,1,3,4,4])
s = np.where(s.duplicated(keep='last') & s.eq(s.min()), np.nan, s)
s
Out[1]: array([0., 1., 1., 3., 4., 4.])