2017-06-16 44 views
0

我有以下种类计算的时间间隔,取决于月份数据帧熊猫

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

和您有什么TRIED? – void

+0

你似乎在使用熊猫。请在你的问题中提及这一点。 –

+0

关于如何在StackOverflow上查找一个月的最后一天,有几个简单的答案,例如https://stackoverflow.com/questions/42950/get-last-day-of-the-month-in-python。一旦你有了这一点,计算天数只是两个日期的差异。 –

回答

3

所以只要Date的D型已经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 
012通过添加 offset,在这种情况下月底,现有的日期

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

所以这个计算的最后一天:

如果需要转换使用to_datetime列。

然后,我们从日期减去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 
+0

我sonst有错误wenn - 2015-01-31,2015-02-28,28 @EdChum – Ekaterina

+0

查看更新后的答案,如果您先减去一天然后再添加月底,那么它会在日期开始或结束时正确处理月 – EdChum

+0

谢谢@EdChum – Ekaterina