在Python中找到第n个范围的中位数

时间:2019-05-30 10:33:58

标签: python pandas numpy

我试图每隔 15天查找数据集中的每个。数据集具有三列-索引,值和日期。

这是根据某些条件评估此中位数的条件。根据条件,每15天将获得新的价值。 我已经尝试了几种方法(主要是python理解),但我仍然是可以正确解决它的初学者。

    value   date        index
14  13065   1983-07-15  14
15  13065   1983-07-16  15
16  13065   1983-07-17  16
17  13065   1983-07-18  17
18  13065   1983-07-19  18
19  13065   1983-07-20  19
20  13065   1983-07-21  20
21  13065   1983-07-22  21
22  13065   1983-07-23  22
23  .....    .........  .. 

medians = [dataset['value'].median() for range(0, len(dataset['index']), 15) in dataset['value']]   

我希望将数据框中的中值返回到新变量。

syntaxError: can't assign to function call

2 个答案:

答案 0 :(得分:1)

假设您具有以下格式的数据:

test = pd.DataFrame({'date': pd.date_range(start = '2016/02/12', periods = 1000, freq='1D'),
                                         'value': np.random.randint(1,1000,1000)})
test.head()

    date       value
0   2016-02-12  243
1   2016-02-13  313
2   2016-02-14  457
3   2016-02-15  236
4   2016-02-16  893

如果您想每15天进行一次中值,则使用pd.Groupergroupby date:

test.groupby(pd.Grouper(freq='15D', key='date')).median().reset_index()

date        Value
2016-02-12  457.0
2016-02-27  733.0
2016-03-13  688.0
2016-03-28  504.0
2016-04-12  591.0

请注意,在使用pd.Grouper时,您的日期列应为datetime类型。如果不是,请使用:

test['date'] = pd.to_datetime(test['date'])

答案 1 :(得分:-1)

DataFrame.resamplemedian一起使用:

#if encessary convert to datetimes
dataset['date'] = pd.to_datetime(dataset['date'])

dataset = dataset.resample('15D', on='date')['value'].median().reset_index()
print (dataset)
        date  value
0 1983-07-15  13065