我需要获取最小n项的DataFrame索引,而忽略NA。如果我没有NA,则可以这样做:

s = pd.Series([4,3,1,5,2], index=range(10,15))
idx = s.argsort()[:2]
# check:
s.iloc[idx] # [1, 2] as desired


但是在不存在NA的情况下,这将无法工作:

s = pd.Series([None,3,1,5,2], index=range(10,15))
idx = s.argsort()[:2]
# check:
s.iloc[idx] # [2.0, 3.0] instead of [1.0, 2.0]


这是因为arg_sort(与sort_values不同)只是完全跳过了NA,并且不将它们包括在计数中。是否有任何功能类似于arg_sort但将NA放在最后的功能?或者,重写以上代码以与NA一起使用的最佳方法是什么?

我想我可以每次都drop_na()在执行此操作之前,但是这将对数据帧中的多个列完成,因此对每个列进行另一遍处理似乎效率低下。

最佳答案

IIUC,您可以使用nsmallest来获取与所需的最小值数量相对应的索引:

In [2]: s = pd.Series([4,3,1,5,2], index=range(10,15))

In [3]: a = s.nsmallest(2)

In [4]: a
Out[4]:
12    1
14    2
dtype: int64

In [5]: s = pd.Series([None,3,1,5,2], index=range(10,15))

In [6]: a = s.nsmallest(2)

In [7]: a
Out[7]:
12    1.0
14    2.0
dtype: float64

关于python - 在不存在NA的情况下获取最小项目的索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36118413/

10-16 03:56