У меня есть набор данных с датой и временем, который я получаю, используя запрос к моей базе данных. Я не знаю, как получить среднее значение за каждый день. Я хочу создать список со значениями x для температуры и другим массивом с датой, связанной с этим значением, чтобы я мог построить график 2 на графике.
Вот небольшой пример того, как мой набор данных может выглядеть, когда он возвращается из запроса:
[(21, datetime.datetime(2019, 4, 29, 9, 57, 53)),
(22, datetime.datetime(2019, 4, 29, 9, 56, 52)),
(26, datetime.datetime(2019, 4, 29, 9, 55, 49)),
(22, datetime.datetime(2019, 4, 30, 9, 54, 49)),
(20, datetime.datetime(2019, 4, 30, 9, 53, 49)),
(19, datetime.datetime(2019, 5, 1, 9, 52, 48)),
(18, datetime.datetime(2019, 5, 1, 9, 51, 47)),
(21, datetime.datetime(2019, 5, 1, 9, 50, 46))]
Я хотел бы закончить с 2 списками, которые выглядят как ниже:
values = [23, 21, 19.3]
labels = ["2019-4-29", "2019-4-30", "2019-5-1"]
Я не уверен, как обрабатывать свои данные, поэтому я получаю что-то вроде этого, и я даже не уверен в правильных терминах для поиска способа сделать это.
3 ответа
Если вы используете pandas
, что вам следует сделать, вы можете сделать следующее:
import pandas as pd
df = pd.DataFrame([
(21, datetime.datetime(2019, 4, 29, 9, 57, 53)),
(22, datetime.datetime(2019, 4, 29, 9, 56, 52)),
(26, datetime.datetime(2019, 4, 29, 9, 55, 49)),
(22, datetime.datetime(2019, 4, 30, 9, 54, 49)),
(20, datetime.datetime(2019, 4, 30, 9, 53, 49)),
(19, datetime.datetime(2019, 5, 1, 9, 52, 48)),
(18, datetime.datetime(2019, 5, 1, 9, 51, 47)),
(21, datetime.datetime(2019, 5, 1, 9, 50, 46)),
], columns=['value', 'date']).set_index('date')
# resample groups your values by 'd' which stands for "day" and aggregate them by average
df_day = df.resample('d').mean()
Вот ссылка на pandas
документацию: http://pandas.pydata.org/ панды - документы / стабильный /
Попробуйте pandas
(d
ваш список):
import pandas as pd
pd.DataFrame(d, columns=['Value', 'Date'])
df.groupby(df['Date'].map(datetime.datetime.date)).mean()
Выход:
Value
Date
2019-04-29 23.000000
2019-04-30 21.000000
2019-05-01 19.333333
Есть два подхода:
- Использование
pandas
Попробуйте сгенерировать TimeSeries
series = pd.DataFrame.from_values(data, columns=['Value', 'Date'], index=['Date'])
result = series.resample("D").mean()
Выход:
Value
Date
2019-04-29 23.000000
2019-04-30 21.000000
2019-05-01 19.333333
pandas
не разрешено
Используйте регулярные dict
:
from collections import defaultdict
grouper = defaultdict(list)
for value, date in data.items():
grouper[date].append(value)
values = [sum(day) / len(day) for day in grouper.values()]
labels = list(grouper.keys())
Результат будет как в примере.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.