我有DT,這是一個datetime64 系列:
0 2019-12-12 18:43:00
1 2019-03-22 18:30:00
2 NaT
3 2019-04-17 02:00:00
4 2009-03-15 18:00:00
5 2019-04-02 20:25:00
6 2019-05-01 11:00:00
7 2019-04-10 17:00:00
8 1973-07-14 22:00:00
9 2019-06-06 19:00:00
10 2019-06-18 21:00:00
11 2019-06-12 22:00:00
12 2019-06-11 22:00:00
13 2018-06-15 01:00:00
14 1999-08-15 02:30:00
...
88110 2019-10-01 22:00:00
88111 2019-10-01 22:45:00
88112 2019-10-02 01:00:00
88113 2019-10-02 03:26:00
88114 2019-10-02 03:26:00
88115 2019-10-02 05:33:00
88116 2019-10-02 06:35:00
88117 2019-10-02 12:00:00
88118 2019-10-02 19:00:00
88119 2019-10-02 19:15:00
88120 2019-10-02 20:00:00
88121 2019-10-02 20:00:00
88122 2019-10-02 20:03:00
88123 2019-10-02 22:00:00
88124 2019-10-02 22:00:00
Name: date_time, Length: 88125, dtype: datetime64[ns]
和一段代碼:
DT[DT.between("2019-12-05", "2019-12-08") & DT.dt.weekday == 1].dt.weekday.value_counts()
產生:
5 27
3 23
4 19
Name: date_time, dtype: int64
其中包括 3、4 和 5 天,但沒有一個請求的第 1 天!
所以,當我只編碼時:
DT[DT.between("2019-12-05", "2019-12-08")].dt.weekday
它產生:
3821 3
87138 3
87139 3
87140 3
87141 3
..
87328 5
87329 5
87330 5
87331 5
87332 5
這是合乎邏輯的,因為我們有 3 天的間隔,對應于 3 個作業日。是的,我們的作業日范圍內根本沒有作業日的第 1 天!那么為什么這個& DT.dt.weekday == 1過濾器不起作用呢?
非常感謝您的寶貴時間!
更新
當我嘗試使用任何其他過濾器(如& DT.dt.weekday == 2等)時,由于過濾& DT.dt.weekday == 3,我得到一個空系列,如下所示:
DT[DT.between("2019-12-05", "2019-12-08") & DT.dt.weekday == 4]
此外,DT.dt.weekday == 1回傳正常的True/False串列!
也許,我們不能按dt.(...)引數過濾?
uj5u.com熱心網友回復:
原來這是:
DT[DT.between("2019-12-05", "2019-12-08") & DT.dt.weekday == 1]
執行如下:
DT[ (DT.between("2019-12-05", "2019-12-08") & DT.dt.weekday) == 1 ]
這就是為什么 DT.dt.weekday 過濾器在2019-12-05和-08之間的每一天都回傳True的原因,因為它從未真正受到影響,因為在所有提到的天數范圍內都是3到5。& DT.dt.weekday
所以,當我這樣編碼時:
DT[ (DT.between("2019-12-05", "2019-12-08")) & (DT.dt.weekday == 1) ]
一切都按預期進行,即沒有選擇任何內容。但是,另一方面:
DT[ (DT.between("2019-12-05", "2019-12-08")) & (DT.dt.weekday == 3) ]
產生了對應于第 3 天的幾行。
所以,一旦括號被正確地分開A和 過濾運算式B中的陳述句,一切都按設計作業!A & B
無論如何,謝謝大家的時間!=)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/461669.html
