我需要获取最小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/