Найти медиану в n-м диапазоне в Python

Я пытаюсь найти значение каждой медианы в своем наборе данных для каждого 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

Можете ли вы также показать фрейм данных. Просто фиктивный фрейм данных

Mohit Motwani 30.05.2019 12:35

Хорошо, я помещу фрейм данных в исходный пост

Lukáš Tůma 30.05.2019 12:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
289
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.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 в моем индексном столбце?

Lukáš Tůma 30.05.2019 14:25

Если медиана — это имя вашего столбца, вы можете использовать: df['median']=df['median'].map('${:,.2f}'.format) для округления до двух знаков после запятой.

Mohit Motwani 30.05.2019 14:32

Чего вы планируете достичь, группируя по столбцу индекса?

Mohit Motwani 30.05.2019 14:33

Ну значения разные. Также в вашей колонке -> оригинал: 2016-02-12 243 после: 2016-02-12 457.0. Извините, вы не применяете медиану к столбцу даты, а не к столбцу значения? Спасибо!

Lukáš Tůma 30.05.2019 14:49

Это означает, что с 12 февраля 2016 г. по 26 февраля 2016 г. медиана составляет 457. Медиана берется из столбца «Значение».

Mohit Motwani 30.05.2019 15:05

Ах, я понимаю. Это сбивает с толку с самого начала. Во-первых, я ожидал реальную дату для медианы. Спасибо

Lukáš Tůma 30.05.2019 15:38

@jezrae Не с моей стороны

Lukáš Tůma 31.05.2019 10:13

Кстати, какой будет синтаксис, если я хочу найти среднее значение, а не медиану. Что-то вроде этого не работает RSDF5 = RSDF4.groupby(pd.Grouper(freq='15D', key='DATE')).[int(len(RSDF5)//2)].reset_index()

Lukáš Tůma 26.06.2019 11:39

Другие вопросы по теме