Python 根据月份数据帧计算时间间隔
我有以下类型的相框Python 根据月份数据帧计算时间间隔,python,date,pandas,dataframe,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 只要Date的数据类型已经是datetime,那么以下操作应该可以工作: In[109]: from pand
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
只要
Date
的数据类型已经是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
如果需要,使用将列转换为\u datetime
:
df['Date'] = pd.to_datetime(df['Date'])
因此,它通过在现有日期上添加一个(在本例中为月末)来计算最后一天
然后我们从日期中减去LastDay,这将返回一个timedelta,它有一个成员来获得天数
编辑
要处理日期已经是月末的情况,可以减去一天,然后添加月末偏移:
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
只要
Date
的数据类型已经是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
如果需要,使用将列转换为\u datetime
:
df['Date'] = pd.to_datetime(df['Date'])
因此,它通过在现有日期上添加一个(在本例中为月末)来计算最后一天
然后我们从日期中减去LastDay,这将返回一个timedelta,它有一个成员来获得天数
编辑
要处理日期已经是月末的情况,可以减去一天,然后添加月末偏移:
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
你试过什么?你好像在用熊猫。请在您的问题中提及这一点。关于如何在StackOverflow上查找一个月的最后一天,有几个简单的答案,例如。一旦你有了它,计算天数就是取两个日期的差。@s_vishnu我试过定义上个月的最后一天(任何一天):下个月=任何一天。替换(天=28)+datetime.timedelta(天=4)返回下个月-datetime.timedelta(天=下个月.天),你试过什么?你好像在用熊猫。请在您的问题中提及这一点。关于如何在StackOverflow上查找一个月的最后一天,有几个简单的答案,例如。一旦你有了它,计算天数就是取两个日期的差。@s_vishnu我试过定义上个月的最后一天(任何一天):下个月=任何一天。替换(天=28)+日期时间。时间差(天=4)返回下个月-日期时间。时间差(天=下个月。天)我有错误wenn-2015-01-312015-02-28,28@EdChumSee更新答案,如果您先减去一天,然后再加上月末,它将正确处理该月的开始或结束日期谢谢您@EdChumSee请记住接受我的答案,我的答案左上角将有一个空的勾号。如果我有错误wenn-2015-01-312015-02-28,28@EdChumSee更新答案,如果您先减去一天,然后再加上月末,则该日期将正确处理。谢谢您@EdChumSee记住接受我的答案,我的答案左上角将有一个空勾号