Python中的滚动中位数

7 投票
5 回答
6609 浏览
提问于 2025-04-16 14:43

我有一些股票数据,这些数据是基于每天的收盘价。我需要把这些收盘价放进一个Python列表里,然后计算最近30个收盘价的中位数。请问有没有Python库可以做到这一点?

5 个回答

2

中位数不就是在一个排好序的范围中间的那个值吗?

假设你的列表是 stock_data

last_thirty = stock_data[-30:]
median = sorted(last_thirty)[15]

现在你只需要找到并修复那些错位的错误,同时处理一下 stock_data 元素少于30个的情况...

我们来试试看:

def rolling_median(data, window):
    if len(data) < window:
       subject = data[:]
    else:
       subject = data[-30:]
    return sorted(subject)[len(subject)/2]
12

在纯Python中,如果你的数据存储在一个Python列表 a 中,你可以这样做:

median = sum(sorted(a[-30:])[14:16]) / 2.0

(这假设 a 至少有30个项目。)

如果使用NumPy这个库,你可以这样做:

median = numpy.median(a[-30:])
7

你有没有考虑过pandas这个工具?它是基于numpy的,可以自动把时间戳和你的数据关联起来,只要你用numpy.nan填充不认识的日期,它就会把这些日期丢掉。它还提供了一些非常强大的图表绘制功能,使用的是matplotlib。

简单来说,它是为了在Python中进行金融分析而设计的。

撰写回答