pd.Series替换首次出现

问题描述 投票:0回答:2

[尝试用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

因此,从本质上讲,我如何只替换第一次出现的重复最小值?

python pandas dataframe series
2个回答
1
投票

loc + idxmin

[idxmin返回该序列的最小值的第一次出现的索引。

sss.loc[sss.idxmin()] = np.nan

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.])
© www.soinside.com 2019 - 2024. All rights reserved.