繁体   English   中英

使用Python在Excel中将每日数据合并为每月数据

[英]Combine daily data into monthly data in Excel using Python

我试图弄清楚如何将每日日期合并为特定月份,并对特定月份内每一天的数据求和。

注意:我有一个包含每日日期的庞大列表,但在此仅举了一个小示例作为示例。

文件名:(test.xlsx)

对于一个示例(sheet1)包含在数据帧模式下:

       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”是一列字符串而不是您的索引,则可以使用。

数据框示例-为清楚起见已缩短:

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)

然后可以在其上进行分组和求和:

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

结果如下:

          52    55
month       
201107  57.49   49.49
201108  28.52   24.52

如果“日期”是您的索引,只需在之前调用reset_index 如果它不是一列字符串值,那么您需要事先这样做。

最后,您可以将“月”列重命名为“日期”。 我想您可以只用“ DATE”列代替,但我选择明确地做事。 您可以这样做:

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

然后是“ groupby”,“ DATE”而不是月份。

使用重采样

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()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM