【问题标题】:How to get the N nearest entries to the median in a Pandas series?如何在 Pandas 系列中获得 N 个最接近中位数的条目?
【发布时间】:2018-02-07 15:16:27
【问题描述】:

对于熊猫系列:

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

【问题讨论】:

  • 如果n==2 怎么办?你会选择 9 16 还是 16 25 ?

标签: python pandas series median


【解决方案1】:

你可以找到每个值和中位数之间的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

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

【讨论】:

    【解决方案2】:

    你的问题的逻辑,你可以根据你的问题实现这个逻辑。

    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]
    

    【讨论】:

      猜你喜欢
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2019-05-16
      • 2015-06-28
      • 1970-01-01
      • 2015-07-18
      相关资源
      最近更新 更多