Python:根据日期计算平均值并按月显示

时间:2018-07-12 13:36:35

标签: python

我基本上是python新手,并且具有以下要求 我有从1月到12月的日期以及一些像这样的主题的平均值

enter image description here

在所附图像中,有5行属于5月,6行属于6月。

我们该如何按月迭代并计算平均值,就像我想计算5月和6月月份的食物,饮料和浪费平均值(按月计算,我有12个月的数据)。

我需要类似的输出

Month       Food         Drink         wastage 
May-17       2.0          3.0            2.0 
June-17      2.5          2.5             3.0 

2 个答案:

答案 0 :(得分:1)

首先将您的数据放入熊猫数据框中-我自己制作了虚拟数据-您需要弄清楚如何加载源。 (来自csv或excel)。

启动框架

import pandas as pd
import datetime   

 df1 = pd.DataFrame({'Start_date' : ['2018-01-01','2018-01-02','2018-01-03','2018-02- 
    01','2018-03-10','2018-02-05'],'food' : [2, 2.5, 3, 2.4, 5, 4],'drinks' : 
    [1,2,3,4,5,6], 'wastage':[6,5,4,3,2,1]})

确保您的日期列上有日期格式-在此我的输入是字符串,因此我需要转换(您需要在此处使用其他格式),请参阅(日期格式的文档底部:https://docs.python.org/2/library/datetime.html

 df1.Start_date = pd.to_datetime(df1.Start_date, format ='%Y-%m-%d')

我要添加一个月列: 修改年份:

df1["period"] = df1.Start_date.apply(lambda x: datetime.datetime.strftime(x, '%b-%y'))

df1['month'] = pd.DatetimeIndex(df1.Start_date).month

按均值和均值分组

 df1.groupby(['month']).mean() # for only month groupings

 df1.groupby(['period']).mean() # for output listed above

答案 1 :(得分:0)

import calendar
df= pd.DataFrame({'date': ['6/8/2015','7/10/2018','6/5/2015'],'food':[1.5,2.5,3],'drinks':[2,2.4,3],'wastage':[2,2.5,3],})
df.date=pd.to_datetime(df.date,format="%m/%d/%Y")
df=pd.DataFrame(df.groupby(by=[df.date.dt.month.rename('month'),df.date.dt.year.rename('year')]).mean()).reset_index()
df['month'] = df['month'].apply(lambda x: calendar.month_abbr[x])
df['year']=df['year'].apply(str)
df['year']=df.year.str.replace("20","")
df['period'] = df[['month', 'year']].apply(lambda x: '-'.join(x), axis=1)
df=df.drop(['year','month'],axis=1)
df=df.rename(index=str, columns={"period": "month"})
cols = df.columns.tolist()
cols = cols[-1:] + cols[:-1]
df[cols]

输出

    month   drinks  food    wastage
0   Jun-15  2.5    2.25     2.5
1   Jul-18  2.4    2.50     2.5