pd.Series替换第一次出现

时间:2019-10-16 03:54:21

标签: python pandas dataframe series

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

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

2 个答案:

答案 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.])