Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据月份数据帧计算时间间隔_Python_Date_Pandas_Dataframe - Fatal编程技术网

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记住接受我的答案,我的答案左上角将有一个空勾号