我有以下类型的日期框架
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
答案 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