gL iTdZddlmZmZddlZddlZddlZddlZddlm Z m Z m Z m Z m Z mZmZmZddlmZddlmZddlmZej0dZej0dZGd d Zy) z5 test with the TimeGrouper / grouping with datetimes )datetime timedeltaN) DataFrame DatetimeIndexIndex MultiIndexSeries Timestamp date_rangeoffsets)Grouper) BinGrouperctgdtdddddtdddddtdddd dtddd ddtjtddd d dgd }|S)z DataFrame used by groupby_with_truncated_bingrouper, made into a separate fixture for easier reuse in test_groupby_apply_timegrouper_with_nat_apply_squeeze  rrr rr r)QuantityDate)rr pdNaT)dfs k/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pandas/tests/groupby/test_timegrouper.pyframe_for_truncated_bingrouperr"sy +$1b!,$1b!,$Ar1-$Ar1-$1b!,   B Ic|}tdd}|j|}t|jjt|jj k7sJ|S)a. GroupBy object such that gb._grouper is a BinGrouper and len(gb._grouper.result_index) < len(gb._grouper.group_keys_seq) Aggregations on this groupby should have dti = date_range("2013-09-01", "2013-10-01", freq="5D", name="Date") As either the index or an index level. r5Dkeyfreq)r groupbylen_grouper result_indexgroup_keys_seq)r"r tdggbs r!!groupby_with_truncated_bingrouperr04sU (B f4 (C CB r{{'' (C 0J0J,K KK K Ir#cdeZdZdZej j dddgdZdZej j dgdd Z d Z d Z d Z d Z dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZej j@d Z!y!)" TestGroupBycFtdjgdtdddddtdddddtdd dd dtdd d d dtdd d d dtddd ddgd}|jd}||fD]}|j dg}t ddddd|j j}t|rdnddd|}|jdti}|r|jddi}d|jd<d|jd <d!|jd"<tjgd#d$%|jgd&df<|jdj}tj |||j#}|j%t'd'j} tj | ||j%t'd'j} tj | |y)(NzCarl Carl Carl Carl Joe Carlrrrrrrrrrr rrBuyerrrrbyr2013090120131205r%left)r(name inclusiveunit)r6rindexr6str CarlCarlCarl)rrCarlCarl)rJoe)rr)rErint64dtype)rrErr()rsplitr sort_values set_indexr rAr>astypeobjectilocnparrayresamplesumtmassert_frame_equal sort_indexr)r ) selfusing_infer_string df_original df_reorderedr exp_dtiexpectedresult1 df_sortedresult2result3s r!test_groupby_with_timegrouperz)TestGroupBy.test_groupby_with_timegrouperLs 7==?/T1aQ/T1aQ/T2q"a0T2q"a0T2q"a0T1aQ/    #..*.=  - 5Bvh'B  XX]] G! 2"qIH  '89H!#??GU+;<"0HMM$ ",HMM$ #(HMM% +-88Jg+NHMM*a- (kk$'++-G  ! !'8 4 I''T(:;??AG  ! !'8 4jjd!3488:G  ! !'8 4A 5r# should_sortTFc>tdjdjgdtdddddtdddddtdd dd dtdd d d dtdd d d dtdd d d dgd}|r|jdd}|j dd}|j t d}|jsJt|jtsJ|j}t|tsJt|dk(sJy)Nz A A A A A BzCarl Mark Carl Joe Joe Carl)rrrrrrrrrrrrrr4rBranchr6rrrFr8 ascendingrdrop6MErKr)rrLrrMrNr)r group_keys isinstancer+rgroupsdictr*)rYrdr grps r!%test_groupby_with_timegrouper_methodsz1TestGroupBy.test_groupby_with_timegrouper_methodss '--/6<<>.T1aQ/T1aQ/T2q"a0T2q"a0T2q"a0T2q"a0    :?B \\&u\ - JJwE* +|||!**j111&$'''6{ar#cHtdjdjgdtdddddtdddddtdd dd dtdd d d dtdd dd dtdd d d dtdd d d dtdd d d dgdjd}|j dd}||fD]M}tdjgdtdd dddtdd dddtdd dddgdjddg}d}|j t ddgjd}tj||tdjgdtdddddtdddddtdddddtdddddgdjddg}|j t d dgjd}tj||Ptdjdjgdtdd dddtdd dddtdd dd dtdd d d dtdd dd dtdd d d dtdd d d dtdd d d dgdjd}|j dd}||fD]}td!jgd"tdd dddtdd dddtdd dddtdd d ddtdd d ddgdjddg}|j t d#dgjd}tj|||j t d$dgjd}tdjgdtdd dddtdd dddtdd dddgdjddg}tj|||j}|j t d$d%dgjd}tj||tjtd&'5|j t d$d(%dgjddd|jd}|j t d$d)dgjd}tj|||j t d$d)dgjd}tj||tjtd*'5|j t d$d()dgjddd|j}|j t#j$d z|d<|j t d$d%dgjd}tdjgdtdd+d,ddtdd+d,ddtdd+d,ddgdjddg}tj||d-}tjt|'5|j t d$dd.dgjdddtdggdgt'tdd dddgt#j$d/0}|j t d$jd}tj|||j t d$gjd}tj|||j j)d|_|j j*t#j$k(sJ|j t d$d%jd}tj|||j t d$d%gjd}tj||y#1swYxYw#1swYxYw#1swYxYw)1NzA A A A A A A Bz$Carl Mark Carl Carl Joe Joe Joe Carl)rrrrrfrrrrrrrrrrrr4rrgrrFriz Carl Joe Mark)rrrr5r6z!The default value of numeric_onlyYErKT) numeric_onlyzCarl Mark Carl Joe)rrrr6MSzCarl Joe Mark Carl Joe)rErfrr1D1MEr(r'z#'The grouper name foo is not found'matchfoo)r(levelzThe level foo is not valid z2The Grouper cannot specify both a key and a level!)r(r'rr(r<columnsrA)rrLrrNrMr)r rUrVrW reset_indexpytestraisesKeyError ValueErrorcopyrAr MonthEndrshiftr()rYr[r`r r^msgresults r! test_timegrouper_with_reg_groupsz,TestGroupBy.test_timegrouper_with_reg_groupssu +113?EEG4T1aQ/T1aQ/T2q"a0T2q"a0T2q"a0T2q"a0T2q"a0T2q"a0    )F ! $ ++zU+K  * 4B ,224 + r2q!4 r2q!4 r2q!4 i)* 6CZZd!3W =>BBPTBUF  ! !&( 3 1779 - q!Q2 q!Q2 q!Q2 q!Q2   i)* ZZe!4g >?CCQUCVF  ! !&( 3= 4@ +113?EEG4T2q"a0T2q"a0T2q"a0T2q"a0T2q"a0T2q"a0T2q"a0T2q"a0    )F ! $ ++zU+K  *h 4B 5;;= 0 r1a3 r1a3 r1a3 r1a3 r1a3   i)* ZZd!3W =>BBPTBUF  ! !&( 3ZZe!4g >?CCQUCVF ,224 + r2q!4 r2q!4 r2q!4 i)*   ! !&( 3!BZZe!@' JKOO!PF  ! !&( 3x/TU L GE:GDEIIK Lf%BZZe6!BG LMQQ!RF  ! !&( 3ZZe1!=w GHLL!MF  ! !&( 3z1MN N Ge>&&'*:*:*<< <<ZZU ?@DDRVDWF  ! !&( 3ZZe!@ ABFF!GF  ! !&( 3Qh 4N L L N N0  s$#-a= -b 1.b=b b b! r()DMErvzQE-APRcttjgdgdgdgddjd}|j ddj |j d jjddgjjd }d|_ |jj t| dgdj }tj|||j t| dgdj }tj||y) N) 2012100220121007201301302013020220130305r20121207rrrrr) rrrrrrrrrrrr) iiliiioZi8gi-ri!) r4rrG'rrr-"rr4)dateuser_id whole_costcost1rrrr) min_countrHrK)rr to_datetimerNr)rTrUdropnareorder_levelsrXrOr<r rVassert_series_equal)rYr(r r^r_ras r!%test_timegrouper_with_reg_groups_freqz1TestGroupBy.test_timegrouper_with_reg_groups_freqZs  @ GA! # F )F G L JJy !, / Xd^ S1S  VX ^VY/ 0 Z\ VG_ %  MMO # #W$%7$C D\ R V V X  w1**g40)<=lKOOQ w1r#ctdjgdtdddddtdddddtdd dd dtdd d d dtdd d d dtddd ddgd}|jd}|jgd|jd d g|jdgg}gd}||fD]d}|j t dd}t||D]7\}}t|} |j| } tj| |9f|jdg|jd g|jdgg}gd} ||fD]k}|j dt ddg}t| |D]<\\} }}t|} |j| | f} tj| |>m|jd}|jd}|jgd|jd d g|jdgg}||fD]c}|j t d}t||D]7\}}t|} |j| } tj| |9ey)NzCarl Joe Joe Carl Joe Carlrrrrrrrrrrr4rrr5rr7)rrrrz) 2013-09-30 2013-10-31 2013-12-31rrr}))rFr)Carlr)rFrr6rK) rrLrrMrQr)r zipr get_grouprVrWrN) rYr[r\ expected_listdt_listr groupedtr^dtrg_listbs r!test_timegrouper_get_groupz&TestGroupBy.test_timegrouper_get_groups 5;;=/T1aQ/T1aQ/T2q"a0T2q"a0T2q"a0T1aQ/    #..*.=    Y '   aV $   aS ! = - 8Bjjd!?@G"7M: 8 8q\ **2.%%fh7 8 8   aS !   aS !   aS ! X - 8Bjj'7&+I!JKG$' $> 8 Aq\ **Ar73%%fh7 8 8"++F3 "..*.=    Y '   aV $   aS !  - 8Bjjd!34G"7M: 8 8q\ **2.%%fh7 8 8r#cbtddgddgd}|j}tj|d|d<d}d}t j t | 5|jtd j|}dddd}t j t | 5|jtd d j|}dddt jjd jd y#1swYxYw#1swYLxYw)N 10/10/2000 11/10/2000rrrvaluerc>t|djgdS)Nr)rU)r rUxs r!sumfunc_serieszMTestGroupBy.test_timegrouper_apply_return_type_series..sumfunc_seriess1W:>>+,h7 7r#7DataFrameGroupBy.apply operated on the grouping columnsr~r'rr}Trk) rrrrrVassert_produces_warning FutureWarningr)r applyrWr)rYr df_dtrrr^rs r!)test_timegrouper_apply_return_type_seriesz5TestGroupBy.test_timegrouper_apply_return_type_seriess| <BxP Q uV}5f  8H  ' ' S A Mzz'f"56<<^LH MG  ' ' S A Y]]7&#ABHHXF Y    D  )8+?+?T+?+J  M M Y Ys+D.,D%D"%D.c^tddgddgd}|j}tj|d|d<d}d}t j t | 5|jtd j|}dddt j t | 5|jtd d j|}dddt jjd jd y#1swYxYw#1swYLxYw)Nrrrrrrc6|jjSN)rrUrs r! sumfunc_valuezKTestGroupBy.test_timegrouper_apply_return_type_value..sumfunc_values77;;= r#rr~rrr}Trk) rrrrrVrrr)r rrr)rYr rrrr^rs r!(test_timegrouper_apply_return_type_valuez4TestGroupBy.test_timegrouper_apply_return_type_values | <BxP Q uV}5f  !H  ' ' S A Lzz'f"56<<]KH L  ' ' S A X]]7&#ABHHWF X    D  )8+?+?T+?+J  L L X Xs+D,,D#D #D,c0d}tdd|}ttj|tj|d|}|j d}|j }t tt|jtsJy)Niz2012/1/15min)startr(periods)highlowr@cXt|j|j|jSr)ryearmonthdayrs r!z?TestGroupBy.test_groupby_groups_datetimeindex..sx'Gr#) r rrRaranger)rpronextiterkeysr)rYrindr rrps r!!test_groupby_groups_datetimeindexz-TestGroupBy.test_groupby_groups_datetimeindexswzH YYw' '0B C3 **GH$tFKKM23X>>>r#c0tddd}tgdgdd|}|jd j}gd }|Dcic]}t |t |gd }}t j|||jd }|D]}}|j|}|j|d f|j|d fgg}t |gdd|j} t|td| }t j||ycc}w)Nz 2015/01/01rr)rr<)rrErxrfr)rrrrzrABr@r)z 2015-01-05z 2015-01-04z 2015-01-03z 2015-01-02z 2015-01-01r<rrr)r<r(rJABr) r rr)rpr rrVassert_dict_equalrlocrJlistrW) rYrAr rdatesrr^rdataexpected_indexs r!"test_groupby_groups_datetimeindex2z.TestGroupBy.test_groupby_groups_datetimeindex2 s<@ _?C5 Q&)00VLQ DHIdO]D6? ?   VX.**6** 4D&&t,FVVD#I&tSy(9:;D*V#U[[N!tDzPH  ! !&( 3 4  sDcgd}tgd|tjddddgdzd }|d jd |d <t gd d d }t ddgdzd}t j||g}tgdgdd|ddg}|jd dgj}tj||t |d}ttjddgdd|}t gdd}tgdgdd|ddg}|jd !j}tj||y)"N2011-07-19 07:00:002011-07-19 08:00:002011-07-19 09:00:00rrrarrrrrrErHrIrrr)labelrvalue1value2rct|dS)N US/Pacifictz)r )ds r!rzBTestGroupBy.test_groupby_groups_datetimeindex_tz..4s ! 8Ur#rrrrrrr)rr<rrrrrrrrzrrrrrrrrrrrrrArz Asia/Tokyorrrrrrrr@rrrrrrxrrzrErr) rrRrrrrr from_arraysr)rUrVrW) rYrr exp_idx1exp_idx2exp_idxr^rdidxs r!$test_groupby_groups_datetimeindex_tzz0TestGroupBy.test_groupby_groups_datetimeindex_tz"sm 7!))AW5a&1*   J--.UV:    #sag6(((H)=>)5G Hx(  Z12668 fh/U|4 yy'2>P Q   Q  I 6x(  !$((* fh/r#ctdtjdfdtjdfgddg}|jdj }|ddt dk(sJy)Nrz 2012-07-03z 2012-07-04rr)r)rrR datetime64r)firstr )rYr rs r!&test_frame_datetime64_handling_groupbyz2TestGroupBy.test_frame_datetime64_handling_groupbyask |, -2==3N/O P&M C&&(f~a Il$;;;;r#c ttdgdgdd}|jddjj d}t t d d t d d t d d t dd t dd gdt}tj||d }|jdjj|}tj|jj|}t gdgdd}tj|jj|}tj||y)Nr)2000-01-28 16:47:002000-01-29 16:48:00z2000-01-30 16:49:002000-01-31 16:50:00z2000-01-01 16:50:00)America/ChicagorAmerica/Los_AngelesrAmerica/New_York)rrrrF)rncrtj|jj|jSr)rrr tz_localizer<rs r!rz9TestGroupBy.test_groupby_multi_timezone..s$bnnQ'**66qvv>r#z2000-01-28 16:47:00-0600rrz2000-01-29 16:48:00-0600z2000-01-30 16:49:00-0800rz2000-01-31 16:50:00-0600z2000-01-01 16:50:00-0500rr)r<rJ)rrr)rrrrAr<)rranger)rrr r rPrVrrrrrr)rYr rr^r res_values exp_valuess r!test_groupby_multi_timezonez'TestGroupBy.test_groupby_multi_timezonejs8 q  (DU388>> > 49JK49JK49NO49JK49KL     vx0 ZZ%**44R8  +..::2> Q >>*-00<>   #sag6(((H)=>)5G Hx(  Xw/0446 fh/~~e#. yy'2>P Q  .. Q  I 6x(  !$((* fh/_BsF ctddg}|djd|d<t|djjt j sJ|jdj}|dj}t|jt j sJ|djdj}|j}t|jt j sJy)N)r|>c)rr&rzM8[ns]rr) rrO issubclassrJtyperRrr)r)rYr rgot_dts r!test_groupby_first_datetime64z)TestGroupBy.test_groupby_first_datetime64s 02JK L1 X&1"Q%++**BMM:::!$**,&++r}}555AQ'--/&++r}}555r#c.ttdtjdd}|j ddj dj d}|j ddj}tj||y)N20130101rrrc"|jSr)maxrs r!rz9TestGroupBy.test_groupby_max_datetime64..s r#zM8[s]) rr rRrr)rrOr.rVr)rYr r^rs r!test_groupby_max_datetime64z'TestGroupBy.test_groupby_max_datetime64stYz21F G::c?3'--.?@GGPC%))+ vx0r#cttdtdgdzd}|jddj d}t tdgdzd}t j||y)Nrz 2000-01-1rrrminr)rrr r) transformr rVrrYr rr^s r!test_groupby_datetime64_32_bitz*TestGroupBy.test_groupby_datetime64_32_bitsjU1XY{-C,Dq,HI JC%//69[12Q6SA vx0r#c Lttjjdj dddt dddd d }|j d jd }|j d d j}tj||y) Nrrr<)sizez01/01/2000 00:00sUTC)rr(r)factortimer:r;) rrRrandom default_rngintegersr r)r.rVr)rYr df1df2s r!$test_groupby_with_timezone_selectionz0TestGroupBy.test_groupby_with_timezone_selections))//2;;Aqr;J"#5rPUV   jj"&&(0jj"6*..0 sC(r#cdtdgtjtjgd}|ddj tjk(sJtdgdi}tjtj|d<|ddj tjk(sJy)Nr)rrrrrrrr)rrnowpytzutctzinfo)rYr s r!test_timezone_infozTestGroupBy.test_timezone_infosaS TXX(>'?@ A#wqz  DHH,,, Y' (,,txx(3#wqz  DHH,,,r#ctgddztdddd}|jdjj }t gd t gdd d }tj||y) NrCrrDrEr1)rr()rrr)rrrrrr) rr r)rcountr rrVrr3s r!test_datetime_countzTestGroupBy.test_datetime_countsd a-*UAE*R S C&&,,.)5+EGT vx0r#c @ttjdddtjgtjtdtdtdtjgd}t j |j |_d |d <||j j}|jd }|jd }tj|j|jtj|j|jtj|j|jtj|j|jy) Nz2015-07-24 10:10z2015-07-25 11:11z2015-07-23 12:12r)daysrr)rtdrgroup)rrRnanrrrrnotnar)rVrWr.r1rlast)rYdf_testdf_ref grouped_test grouped_refs r!$test_first_last_max_min_on_time_dataz0TestGroupBy.test_first_last_max_min_on_time_datas5FF&&&FF FF1%1%1%FF   $^^GJJ/ ))+,w/ nnW-  koo/1A1A1CD koo/1A1A1CD k//1<3E3E3GH k..0,2C2C2EFr#cttdtjtdggdd}t dd}|j |dj }||jjj |dj }|jjd|_ tj||y) Nz2016-06-28 09:35:35z2016-06-28 16:46:28)123)r;rr;r r&r) rr rrr r)nuniquer;notnullrA _with_freqrVr)rYtestgrouperrr^s r!%test_nunique_with_timegrouper_and_natz1TestGroupBy.test_nunique_with_timegrouper_and_nat;s34FF34 (    f3/g&v.668 ))+,44W=fEMMO!2248 vx0r#c0gdtgddgdd}t|jd}td }|j |}|j }|j |g}|j }t j||y) N)shanghaibeijingrc)z2017-08-09 13:32:23z2017-08-11 23:23:15z2017-08-11 22:23:15zdatetime64[ns]rIrC)locationr;rr;rrK)r rrNr r)rJrVrW)rY data_framer`rrr^s r!!test_scalar_call_versus_list_callz-TestGroupBy.test_scalar_call_versus_list_callNs<U&  z*44V< s#$$W-$$gY/==? fh/r#c hd}tjd|dd}tt||}|j |j j j}tt|ttd|dz|j}tj||y) Nrz2018-01MMonth)rrr(r<r@rr) r period_ranger rr)rArrUrr<rVr)rYrrA period_seriesrr^s r!test_grouper_period_indexz%TestGroupBy.test_grouper_period_indexbsW3W uW~U; &&}':':'@'@AEEG 'N%a1(=EJJ"O  vx0r#c0|}|djd}|j}|djj}t dddd|}t j |dgt|zg}tgd |d }tj||y) Nrcdt|iS)Nr)r*rs r!rzRTestGroupBy.test_groupby_apply_timegrouper_with_nat_dict_returns..xseSV_r#r 2013-09-01 2013-10-01r%r(r<r>r)rrrrrrrr) robj_valuesr>r rrr*r rVr) rYr0r/resr r>dtimir^s r!4test_groupby_apply_timegrouper_with_nat_dict_returnsz@TestGroupBy.test_groupby_apply_timegrouper_with_nat_dict_returnsps /n""#<= VV&z!!&&|$VRVW  # #S5'CH*<$= >/r K sH-r#c |}|djd}|j}|djj}t dddd|}t dt jt jt jt jt jd g|jdd }tj||y) NrcVt|r|jdStjS)Nr)r*rQrRrPrs r!rzTTestGroupBy.test_groupby_apply_timegrouper_with_nat_scalar_returns..s#a&QVVAYbffr#rrprqr%rrrrr) rrsrtr>r r rRrPr^rVr)rYr0r/rur r>rvr^s r!6test_groupby_apply_timegrouper_with_nat_scalar_returnszBTestGroupBy.test_groupby_apply_timegrouper_with_nat_scalar_returnss /n""#LM VV&z!!&&|$VRVW  ;..&  sH-r#c|}tdd}|j|}|jdk(sJ|jj |j j dk(sJd}tjt|5|jd}dddttdg|djd }tgd g|tgd d }tj|y#1swYcxYw)Nr100YEr&rrr~c|ddzS)Nrrrs r!rzSTestGroupBy.test_groupby_apply_timegrouper_with_nat_apply_squeeze..sQz]Q%6r#r)rJr<)$rErErr)rrrrrrrr)r r)ngroups _selected_obj _get_axisaxisnlevelsrVrrrrr rJrrW) rYr"r r.r/rrurvr^s r!5test_groupby_apply_timegrouper_with_nat_apply_squeezezATestGroupBy.test_groupby_apply_timegrouper_with_nat_apply_squeezes,&w/ ZZ_zzQ))"''2::a???H  ' ' S A 8((67C 8Y|,-RZ5E5EFS  / ;  c8, 8 8s C88Dc:tjd|}|djdd}|djd}tj|||dgjdd}|dgjd}tj ||y)Nnumbarc,tj|SrrRnanmeanvaluesrAs r!rzITestGroupBy.test_groupby_agg_numba_timegrouper_with_nat.."**V"4r#)enginemeanc,tj|Srrrs r!rzITestGroupBy.test_groupby_agg_numba_timegrouper_with_nat..rr#)r importorskip aggregaterVrrW)rYr0r/rr^ result_df expected_dfs r!+test_groupby_agg_numba_timegrouper_with_natz7TestGroupBy.test_groupby_agg_numba_timegrouper_with_nats G$/J)) 4W* j>++F3 vx0 |$.. 4W/ *&008  i5r#N)"__name__ __module__ __qualname__rcrmark parametrizersrrrrrrrr rrr$r*r/r4rArHrKrWrargrmrxr{r single_cpurrr#r!r2r2Ks65p [[]T5M: ; @s4j [[V%@A82B82t@8D * ( ?4*=0~<01d;0z 611 )-1 GD1&0( 1.".(-8 [[66r#r2)__doc__rrnumpyrRrrEpandasrrrrrr r r r pandas._testing_testingrVpandas.core.groupby.grouperr pandas.core.groupby.opsrfixturer"r0r2rr#r!rss     /.,,z 6z 6r#