计算时间间隔,具体取决于月份数据框架熊猫

时间:2017-06-16 09:06:07

标签: python date pandas dataframe

我有以下类型的日期框架

id,Date 
1,2015-01-23
2,2015-02-20
3,2016-03-16

对于每个月,我想计算相应月份的日期和最后一天之间的天数

id,Date,LastDay,Interval 
1,2015-01-23,2015-01-31,8
2,2015-02-20,2015-02-28,8
3,2016-03-16,2016-03-31,15

1 个答案:

答案 0 :(得分:3)

只要Date的dtype已经datetime,那么以下内容应该有效:

In[109]:
from pandas.tseries.offsets import *
df['LastDay'] = df['Date'] + MonthEnd()
df['Interval'] = (df['LastDay'] - df['Date']).dt.days
df

Out[109]: 
   id       Date    LastDay  Interval
0   1 2015-01-23 2015-01-31         8
1   2 2015-02-20 2015-02-28         8
2   3 2016-03-16 2016-03-31        15

如果需要,请使用to_datetime转换列:

df['Date'] = pd.to_datetime(df['Date'])

因此,这会计算最后一天,将offset(在本例中为月末)添加到现有日期。

然后我们从Date中减去LastDay,这将返回timedelta,这有一个成员只获得天数dt.days

修改

要处理日期已经是月末的情况,您可以减去一天然后添加月末偏移量:

In[117]:
from pandas.tseries.offsets import *
df['LastDay'] = (df['Date'] + DateOffset(days=-1)) + MonthEnd()
df['Interval'] = (df['LastDay'] - df['Date']).dt.days
df

Out[117]: 
   id       Date    LastDay  Interval
0   1 2015-01-23 2015-01-31         8
1   2 2015-02-20 2015-02-28         8
2   3 2016-03-16 2016-03-31        15
3   4 2015-01-31 2015-01-31         0
4   5 2015-01-01 2015-01-31        30