如何在 Pandas 系列中获得 N 个最接近中位数的条目?
How to get the N nearest entries to the median in a Pandas series?
对于 Pandas 系列:
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()
抓取,其中 returns 16
。如何抓取中位数附近的N个条目?类似于:
print(ser.get_median_entries(3)) # N == 3; not real functionality
3 9
4 16
5 25
dtype: int64
您可以找到每个值与中位数之间的 abs 差异并使用 sort_values()
:
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]
对于 Pandas 系列:
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()
抓取,其中 returns 16
。如何抓取中位数附近的N个条目?类似于:
print(ser.get_median_entries(3)) # N == 3; not real functionality
3 9
4 16
5 25
dtype: int64
您可以找到每个值与中位数之间的 abs 差异并使用 sort_values()
:
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]