以月为单位获取两个日期时间之间的天数(以熊猫为单位)

法利哈·兹克拉(Faliha Zikra)

这是一个数据集,其中包含将人员分配给角色的时间,并具有其开始日期和年份月,以便按其担任该角色的那几个月:

  | ID | Name | strt_dt | end_dt | yearmo | 
  | 1  | Jay  | 4-22-19 | 7-30-19| 201904 | 
  | 1  | Jay  | 4-22-19 | 7-30-19| 201905 |  
  | 1  | Jay  | 4-22-19 | 7-30-19| 201906 |   
  | 1  | Jay  | 4-22-19 | 7-30-19| 201907 |  
  | 2  | Fao  | 7-14-19 |10-14-19| 201907 |    
  | 2  | Fao  | 7-14-19 |10-14-19| 201908 |   
  | 2  | Fao  | 7-14-19 |10-14-19| 201909 |   
  | 2  | Fao  | 7-14-19 |10-14-19| 201910 |    

我要计算此人担任该角色的每个月月中该角色在该月中的多少天。输出应如下所示:

  | ID | Name | strt_dt | end_dt | yearmo | no_of days|
  | 1  | Jay  | 4-22-19 | 7-30-19| 201904 |  9 |
  | 1  | Jay  | 4-22-19 | 7-30-19| 201905 |  31|  
  | 1  | Jay  | 4-22-19 | 7-30-19| 201906 |  30|  
  | 1  | Jay  | 4-22-19 | 7-30-19| 201907 |  30| 
  | 2  | Fao  | 7-14-19 |10-14-19| 201907 |  18|  
  | 2  | Fao  | 7-14-19 |10-14-19| 201908 |  31|  
  | 2  | Fao  | 7-14-19 |10-14-19| 201909 |  30|  
  | 2  | Fao  | 7-14-19 |10-14-19| 201910 |  14|  

我试图从strt中提取它们的日期(减去30以获得dday的数目)和结束日期,并创建一个单独的列。但是我仍然坚持从那里着手。欢迎任何想法或建议。

df['strt_yearmo'] = df['strt_dt'].dt.year * 100 +df['strt_dt'].dt.month
df['end_yearmo'] = df['end_dt'].dt.year * 100 +df['end_dt'].dt.month


  | ID | Name | strt_dt | end_dt | yearmo | strt_yearmo|end_yearmo|
  | 1  | Jay  | 4-22-19 | 7-30-19| 201904 |  201904    |201907|
  | 1  | Jay  | 4-22-19 | 7-30-19| 201905 |  201904    |201907|
  | 1  | Jay  | 4-22-19 | 7-30-19| 201906 |  201904    |201907|  
  | 1  | Jay  | 4-22-19 | 7-30-19| 201907 |  201904    |201907 |
  | 2  | Fao  | 7-14-19 |10-14-19| 201907 |  201907    |201910 |
  | 2  | Fao  | 7-14-19 |10-14-19| 201908 |  201907    |201910 | 
  | 2  | Fao  | 7-14-19 |10-14-19| 201909 |  201907    |201910 |
  | 2  | Fao  | 7-14-19 |10-14-19| 201910 |  201907    |201910 | 

使用np.select(condition, choice,alternative)强迫日期以日期时间和提取月末日期之后yearmo

提取月末日期frm yearmo

df['startmo']=pd.to_datetime(df['yearmo'].astype(str), format='%Y%m')+ pd.offsets.MonthEnd(0)

强制strt_dtend_dt迄今为止

datedf['strt_dt'],df['end_dt']=pd.to_datetime(df['strt_dt']),pd.to_datetime(df['end_dt'])

提出条件

conditions=[df.startmo.dt.month==df.strt_dt.dt.month, df.startmo.dt.month==df.end_dt.dt.month]

#If month in yearmo is the same with strt_dt,substract strt_dt from endmont.
#If month in yearmo is the same with end_dt, extract the days in end_dt

提出与以上每个条件相对应的Choices核心

choices=[df.startmo.sub(df.strt_dt).dt.days+1,df.end_dt.dt.day]

通过匹配条件和选择来计算天数。包括替代品。这里的替代方案是开始和结束的月份与yearmo不匹配的地方,这意味着月份在中间,因此只需提取日期作为条件的替代方案

df['no_of days']=np.select(conditions,choices,df.startmo.dt.day)




ID Name    strt_dt     end_dt  yearmo    startmo  no_of days
0   1  Jay 2019-04-22 2019-07-30  201904 2019-04-30           9
1   1  Jay 2019-04-22 2019-07-30  201905 2019-05-31          31
2   1  Jay 2019-04-22 2019-07-30  201906 2019-06-30          30
3   1  Jay 2019-04-22 2019-07-30  201907 2019-07-31          30
4   2  Fao 2019-07-14 2019-10-14  201907 2019-07-31          18
5   2  Fao 2019-07-14 2019-10-14  201908 2019-08-31          31
6   2  Fao 2019-07-14 2019-10-14  201909 2019-09-30          30
7   2  Fao 2019-07-14 2019-10-14  201910 2019-10-31          14

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:两个日期时间的差异(以月为单位)

是否可以计算两个日期之间的距离(以月或年为单位)?

如何计算两个日期之间的天数,每个月的天数分别以熊猫为单位

将两个舍入设置为2,以小时为单位获取日期时间之间的时差

以秒为单位获取两个日期之间的时差

以分钟为单位获取两个日期之间的差异

PHP-以秒为单位获取两个日期时间之间的差异

如何正确使用ThreeTenABP获取基于UTC的两个日期之间的时间(以毫秒为单位)

以分钟为单位的两个日期(日期时间)之间的时差

两个时间之间的差异(以秒为单位)

两个时间戳之间的差异(以秒为单位)

两个日期之间以分钟为单位的差异

两个日期之间的时差(以秒为单位)iOS

如何获取dql中两个时间戳之间经过的时间(以秒为单位)?

如何以分钟为单位估计两个日期时间之间的差异

如何提取两个日期时间VBA之间以分钟为单位的差异

显示两个日期时间值之间的时差(以小时为单位)

计算两个日期和时间之间的时差(以小时为单位)

如何计算以卢森堡为单位的两个日期之间的持续时间?

如何找到两个日期之间以秒和纳秒为单位的时间差?

两个日期时间之间的时差,仅以小时为单位

如何使用jQuery以秒为单位获取两个时间戳之间的时差?

获取两个Date对象之间的持续时间(以小时和分钟为单位)-JavaScript

使用AngularJs以月为单位转换日期时间

r中两列之间的间隔(以月为单位)

如何使用MomentJS查找两个Unix日期(以天为单位)之间的确切持续时间?

MySQL的。日期差异(以月为单位)

分组日期范围(以月为单位)

如何在Azure逻辑应用程序中以毫秒为单位获取两个日期时间变量的时差