熊猫在新专栏中计算过去几个月的数据

时间:2016-04-19 15:55:30

标签: python datetime pandas multiple-columns

我有以下格式的数据框;

ID | 01/01/2016 | 02/03/2016 | 02/15/2016 | ........
11 | 100        | 200        | 100        | ........

我正在尝试计算新列中最后3个月数据的总和。预期产出应如下;

ID | 01/01/2016 | 02/03/2016 | 02/15/2016 | ........ | Last 3 Months
11 | 100        | 200        | 100        | ........ | 300

作为解决方案,我需要选择今天的日期并将其与列中的日期进行比较并总结值。但是,我不知道该怎么做?你能不能给出一些提示?

谢谢。

1 个答案:

答案 0 :(得分:0)

这并不像最初看起来那么直截了当。您需要确定如何处理逐年更改并在每个月中具有不同的天数。我使用一个简单的功能。您可以调整下面的代码以满足您的需求,但它应该让您入门。

from __future__ import division, print_function

def subtract_months(m):
    '''subtracts specified number of months from current date

    Parameters
    ----------
    m : integer
        how many months to subtract from today's date

    Returns
    -------
    date : datetime value'''

    yr  = dt.date.today().year
    mon = dt.date.today().month - m
    day = dt.date.today().day


    # test whether we went into another year
    if mon<=0:
        yr  -=  1
        mon = 12 + mon


    # test whether we have exceeded maximum number of days in month
    if day>calendar.monthrange(yr,mon)[1]:
        day = calendar.monthrange(yr,mon)[1]

    return dt.date(yr,mon,day)





import pandas as pd
import datetime as dt
import calendar


dates = pd.date_range('20160101','20170101',freq='1D')
data  = pd.np.random.randint(0,100,(5,367))

df = pd.DataFrame(data=data,index=list('ABCDE'),columns=dates)

# now add a new column
df['Last 3 Months'] = df.T.truncate(before=subtract_months(3),after=dt.date.today()).sum(axis=0)