假设sr
是pandas.Series
,那么与sr.mean()
或sr.std()
不同,它会跳过nan
和输出sr.argsort()
将使用-1
来指示nan
所在的位置。但我不想要这种转换。我只希望argsort
的工作方式与mean
或std
完全相同,即不会将nan
值更改为-1
。很遗憾,argsort
没有skipna
参数。我该怎么办?
PS我知道我可以用-1
替换nan
,但这有点笨拙。
sr = pd.Series(data=[2,0.5,99,np.nan])
sr
Out[61]:
0 2.0
1 0.5
2 99.0
3 NaN
dtype: float64
expected_sort = sr.argsort().replace(-1, np.nan)
expected_sort
Out[63]:
0 1.0
1 0.0
2 2.0
3 NaN
dtype: float64
答案 0 :(得分:2)
你目前的方法并不糟糕......
以下是一些替代方案
替代1
sr.argsort().mask(sr.isnull())
0 1.0
1 0.0
2 2.0
3 NaN
dtype: float64
Alt 2
sr.dropna().argsort().reindex_like(sr)
0 1.0
1 0.0
2 2.0
3 NaN
dtype: float64
替代3
AKA overkill
pd.Series(
np.where(
np.isnan(sr.values),
np.nan, sr.values.argsort()
), sr.index)
0 1.0
1 0.0
2 2.0
3 NaN
dtype: float64