熊猫argsort怎么离开南纳?

时间:2017-10-31 06:26:00

标签: python pandas dataframe nan

假设srpandas.Series,那么与sr.mean()sr.std()不同,它会跳过nan 输出sr.argsort()将使用-1来指示nan所在的位置。但我不想要这种转换。我只希望argsort的工作方式与meanstd完全相同,即不会将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

1 个答案:

答案 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