Я пытаюсь найти значение каждой медианы в своем наборе данных для каждого 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
Хорошо, я помещу фрейм данных в исходный пост
Предполагая, что у вас есть данные в следующем формате:
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.Grouper и группа по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'])
Хорошо, это полезно, я добился прогресса, но теперь значения немного странные. Например. - 0.000000e+00 или 9.100000e-02. Могу ли я использовать groupby и Grouper в моем индексном столбце?
Если медиана — это имя вашего столбца, вы можете использовать: df['median']=df['median'].map('${:,.2f}'.format)
для округления до двух знаков после запятой.
Чего вы планируете достичь, группируя по столбцу индекса?
Ну значения разные. Также в вашей колонке -> оригинал: 2016-02-12 243 после: 2016-02-12 457.0. Извините, вы не применяете медиану к столбцу даты, а не к столбцу значения? Спасибо!
Это означает, что с 12 февраля 2016 г. по 26 февраля 2016 г. медиана составляет 457. Медиана берется из столбца «Значение».
Ах, я понимаю. Это сбивает с толку с самого начала. Во-первых, я ожидал реальную дату для медианы. Спасибо
@jezrae Не с моей стороны
Кстати, какой будет синтаксис, если я хочу найти среднее значение, а не медиану. Что-то вроде этого не работает RSDF5 = RSDF4.groupby(pd.Grouper(freq='15D', key='DATE')).[int(len(RSDF5)//2)].reset_index()
Можете ли вы также показать фрейм данных. Просто фиктивный фрейм данных