2017-06-16 75 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