亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在熊貓中獲取一個月級別的兩個日期時間之間的天數

在熊貓中獲取一個月級別的兩個日期時間之間的天數

慕姐8265434 2023-06-13 15:10:33
這是一個數據集,其中包含人員被分配到某個角色的時間,并具有他們的開始日期,以及他們擔任角色的月份的年月:  | 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 以獲得 ddays 的編號)和結束日期并創建一個單獨的列。但我堅持如何從那里開始。歡迎任何想法或建議。df['strt_yearmo'] = df['strt_dt'].dt.year * 100 +df['strt_dt'].dt.monthdf['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 | 
查看完整描述

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


查看完整回答
反對 回復 2023-06-13
  • 1 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號