1 回答
TA贡献1829条经验 获得超7个赞
np.select(condition, choice,alternative) 在将日期强制转换为日期时间并在中提取结束月份日期后使用yearmo
从 yearmo 中提取月末日期
df['startmo']=pd.to_datetime(df['yearmo'].astype(str), format='%Y%m')+ pd.offsets.MonthEnd(0)
胁迫strt_dt和end_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=[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
添加回答
举报