有没有办法每天从我的Python数据集中获取平均值?

时间:2019-05-02 09:17:46

标签: python dataset data-manipulation

我有一个包含日期时间和温度的数据集,该数据集是通过查询数据库获得的。我不知道如何获得每天的平均值。我想创建一个带有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 个答案:

答案 0 :(得分:1)

尝试pandasd是您的列表):

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

答案 1 :(得分:1)

有两种方法:

  1. 使用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
  1. 不允许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())

结果将与所讨论的示例相同。

答案 2 :(得分:1)

如果应该使用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-docs/stable/