Python 如何在熊猫系列中获得与中位数最近的N个条目?

Python 如何在熊猫系列中获得与中位数最近的N个条目?,python,pandas,series,median,Python,Pandas,Series,Median,对于熊猫系列: ser = pd.Series([i**2 for i in range(9)]) print(ser) 0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 dtype: int64 中位数可以用ser.median()抓取,返回16。如何抓住中间带周围的N个条目?比如: print(ser.get_median_entries(3)) # N == 3; not real functi

对于熊猫系列:

ser = pd.Series([i**2 for i in range(9)])
print(ser)
0     0
1     1
2     4
3     9
4    16
5    25
6    36
7    49
8    64
dtype: int64
中位数可以用
ser.median()
抓取,返回
16
。如何抓住中间带周围的N个条目?比如:

print(ser.get_median_entries(3)) # N == 3; not real functionality
3     9
4    16
5    25
dtype: int64

您可以找到每个值和中间值之间的abs差值,并使用
排序\u值()

ser[abs(ser - ser.median()).sort_values()[0:3].index]
#4    16
#3     9
#5    25
#dtype: int64
如果希望将其作为函数,其中
n
是一个输入变量:

def get_n_closest_to_median(ser, n):
    return ser[abs(ser - ser.median()).sort_values()[0:n].index]

print get_n_closest_to_median(ser, 3)
#4    16
#3     9
#5    25
#dtype: int64

您可能需要在边界上添加一些错误检查。

对于您的问题,您可以根据您的问题实现此逻辑

data={j:i**2 for j,i in enumerate(range(0,9))}
median=16

def nearby_values(data,median,depth):
    #subtract each value from median and then slice only three from sorted
    return list(map(lambda x:x[1],sorted([(abs(median-j),j) for i,j in data.items()])[:depth]))
print(nearby_values(data,median,3))
输出:

[16, 9, 25]

如果
n==2怎么办?你要9点16分还是16点25分?