使用Python将日常数据结合到Excel中的每月数据中

我想弄清楚如何将每日date合并到特定的月份,并且总结每个月的数据。

注:我有一个很大的列表,每天的date,但我把一个小样本在这里简单的例子。

文件名:(test.xlsx)

对于示例(工作表1)以数据框模式包含:

DATE 51 52 53 54 55 56 0 20110706 28.52 27.52 26.52 25.52 24.52 23.52 1 20110707 28.97 27.97 26.97 25.97 24.97 23.97 2 20110708 28.52 27.52 26.52 25.52 24.52 23.52 3 20110709 28.97 27.97 26.97 25.97 24.97 23.97 4 20110710 30.5 29.5 28.5 27.5 26.5 25.5 5 20110711 32.93 31.93 30.93 29.93 28.93 27.93 6 20110712 35.54 34.54 33.54 32.54 31.54 30.54 7 20110713 33.02 32.02 31.02 30.02 29.02 28.02 8 20110730 35.99 34.99 33.99 32.99 31.99 30.99 9 20110731 30.5 29.5 28.5 27.5 26.5 25.5 10 20110801 32.48 31.48 30.48 29.48 28.48 27.48 11 20110802 31.04 30.04 29.04 28.04 27.04 26.04 12 20110803 32.03 31.03 30.03 29.03 28.03 27.03 13 20110804 34.01 33.01 32.01 31.01 30.01 29.01 14 20110805 27.44 26.44 25.44 24.44 23.44 22.44 15 20110806 32.48 31.48 30.48 29.48 28.48 27.48 

我想要的是编辑(“test.xlsx”,“sheet1”)导致如下:

  DATE 51 52 53 54 55 56 0 201107 313.46 303.46 293.46 283.46 273.46 263.46 1 201108 189.48 183.48 177.48 171.48 165.48 159.48 

我将如何去执行这个?

这是我迄今为止的代码:

 import pandas as pd from pandas import ExcelWriter df = pd.read_excel('thecddhddtestquecdd.xlsx') def sep_yearmonths(x): x['month'] = str(x['DATE'])[:-2] return x df = df.apply(sep_yearmonths,axis=1) df.groupby('month').sum() writer = ExcelWriter('thecddhddtestquecddMERGE.xlsx') df.to_excel(writer,'Sheet1',index=False) writer.save() 

这将工作,如果“date”是一个string的列而不是您的索引。

示例数据框 – 为了清晰起见缩短:

 df = pd.DataFrame({'DATE': {0: '20110706', 1:'20110707', 2: '20110801'}, 52: {0: 28.52, 1: 28.97, 2: 28.52}, 55: { 0: 24.52, 1: 24.97, 2:24.52 } }) 

这产生:

  52 55 DATE 0 28.52 24.52 20110706 1 28.97 24.97 20110707 2 28.52 24.52 20110801 

在数据框上应用以下函数来生成一个新列:

 def sep_yearmonths(x): x['month'] = x['DATE'][:-2] return x 

喜欢这个:

 df = df.apply(sep_yearmonths,axis=1) 

你可以通过哪一个groupby和总结:

 df.groupby('month').sum() 

造成以下结果:

  52 55 month 201107 57.49 49.49 201108 28.52 24.52 

如果“date”是您的索引,只需调用reset_index之前。 如果它不是一个string值的列,那么你需要事先做好。

最后,您可以将“月份”列重命名为“DATE”。 我想你可以直接用“DATE”这个字段来代替,但是我select明确地做事情。 你可以这样做:

 df['DATE'] = df['DATE'].apply(lambda x: x[:-2]) 

然后“groupby”“DATE”而不是一个月。

使用resample

 import pandas as pd myTable=pd.read_excel('test.xlsx') myTable['DATE']=pd.to_datetime(myTable['DATE'], format="%Y%m%d") myTable=myTable.set_index('DATE') myTable.resample("M").sum() 

在这里输入图像说明