当尝试用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
因此,从本质上讲,我该如何仅替换第一次出现的重复最小值?
答案 0 :(得分:1)
loc
+ idxmin
idxmin
返回该序列的最小值的首次出现的索引。
sss.loc[sss.idxmin()] = np.nan
答案 1 :(得分:0)
您可以使用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.])