U
    fª/eU  ã                   @   s  d dl Zd dlZd dlZd dlmZmZmZmZm	Z	m
Z
 d dlmZ dd„ Zej dddg¡dd	„ ƒZej d
d dg¡dd„ ƒZej dddg¡dd„ ƒZej dddg¡ej dedddejgdœƒeddgiedgdddfedejgdœededdgiedgdddfg¡dd„ ƒƒZdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zej d%d&ge	d'd(d)d*gd+œd&ge	d'd(d)d*gd+œd&ge	d'd(d)d*gd+œfd&d,d&ge	d-d.d)e	d'd(d)e	d/d0d)gd*d1d2gd+œd&d,ge	d-d.d)e	d'd(d)gd*d1gd+œd&d,ge	d/d0d)e	d'd(d)gd2d1gd+œfg¡d3d4„ ƒZej d5de	d6d7d)dgde	d8d7d)d9gg¡d:d;„ ƒZej d<ejd=d>gd?dejd*d1gd@de dAdBg¡ej d*d1gdCdDg¡ej dEdddFdGg¡dHdI„ ƒƒZ!dJdK„ Z"ej dLdMdg fdMd g fdMd*d d1gfdMdNd d*d1gfdOdg fdOd g fdOd*d*d1gfdOdNd d*d1gfg¡ej dPdg d&gd,gd&d,gg¡ej dQd=d>g¡dRdS„ ƒƒƒZ#ej dTdMdg fdMd g fdMd*d d1gfdMdNd d*d1gfdOdg fdOd g fdOd*d*d1gfdOdNd d*d1gfg¡dUdV„ ƒZ$dWdX„ Z%dYdZ„ Z&d[d\„ Z'ej d]dd^d_g¡d`da„ ƒZ(dbdc„ Z)ddde„ Z*dS )fé    N)Ú	DataFrameÚIndexÚ
MultiIndexÚSeriesÚ	TimestampÚisnac                 C   s  |   d¡}| ¡ }| jddgdddgf }tddgdd	|_| ¡ }t ||¡ | d¡}t ||¡ | 	¡ }| jd
dgdddgf }tddgdd	|_t ||¡ | d¡}t ||¡ | d¡}| jddgdddgf  
¡ }tddgdd	|_| ¡ }t ||¡ |d  ¡  |d  	¡  |d  d¡ tj| j| d dkdf< t|d  ¡ d ƒs^t‚t|d  	¡ d ƒsxt‚t|d  d¡d ƒs”t‚tdtjgddgd
dggddgd} |   d¡}| ¡ }| jddg  d¡}t ||¡ | jddg  d¡}|jddd}t ||¡ d S )NÚAé   r   ÚBÚCÚDÚbarÚfoo©Únameé   é   éÿÿÿÿé   é   é   é   ©ÚcolumnsÚany©Údropna)ÚgroupbyÚfirstÚlocr   ÚindexÚ
sort_indexÚtmÚassert_frame_equalÚnthÚlastÚcopyÚnpÚnanr   ÚAssertionErrorr   ÚilocÚ	set_index)ÚdfÚgroupedr   Úexpectedr$   r%   ÚgÚresult© r1   úA/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/groupby/test_nth.pyÚtest_first_last_nth   sD    



$
r3   Úmethodr   r%   c                 C   sŽ   t ddddgddd|gdœƒ d¡}t|| ƒƒ }| dkrBddg}nddg}tj||d jd}tddgdd	}t d|i|d
}t ||¡ d S )Nr	   r   r   ©ÚaÚbr6   r   r7   ©Údtyper   ©r    )	r   r   Úgetattrr'   Úarrayr9   r   r"   r#   )r4   Únulls_fixtureÚgroupsr0   ÚvaluesÚidxr.   r1   r1   r2   Útest_first_last_with_na_object@   s    $
rA   r    r   c                 C   sŒ   t ddddgddd|gdœƒ d¡}| | ¡}| dkr@ddg}nd|g}tj||d jd}tddgdd	}t d|i|d
}t ||¡ d S )Nr	   r   r   r5   r6   r   r7   r8   r   r:   )	r   r   r$   r'   r<   r9   r   r"   r#   )r    r=   r>   r0   r?   r@   r.   r1   r1   r2   Útest_nth_with_na_objectR   s    $

rB   c                 C   s>   t  dgd gdœ¡}|jddd}t|| ƒƒ }t ||¡ d S )Nr6   ©ÚidÚvaluerD   F©Úas_index)r   Ú	from_dictr   r;   r"   r#   )r4   r,   r>   r0   r1   r1   r2   Útest_first_last_with_Noned   s    rI   zdf, expectedr6   r   rC   rE   rD   r   r:   r8   c                 C   s"   t | d¡| ƒƒ }t ||¡ d S )NrD   )r;   r   r"   r#   )r4   r,   r.   r0   r1   r1   r2   Ú"test_first_last_with_None_expandedo   s    rJ   c           
      C   s^  |   ¡ }d|d< d|d< | d¡}| ¡ }|jddgddd	ddgf }td
dgdd|_| ¡ }t ||¡ | 	¡ }|jddgddd	ddgf }td
dgdd|_| ¡ }t ||¡ | 
d¡}|jddgddd	ddgf }td
dgdd|_| ¡ }t ||¡ ttdƒƒ}| d¡ ttdƒ|dd}|jdks:t‚|jdd ¡ }	|	jdksZt‚d S )NTÚEr	   ÚFr   r   r
   r   r   r   r   r   r   r   r   r   é
   é	   é   ZIntCol)Údatar    r   Úint64)Úlevel)r&   r   r   r   r   r    r!   r"   r#   r%   r$   ÚlistÚrangeÚappendr   r9   r)   )
Zdf_mixed_floatsr,   r-   r   r.   r%   r$   r@   ÚsÚfr1   r1   r2   Útest_first_last_nth_dtypesƒ   s2    


rX   c                  C   s‚   t dgttjgtddœƒ} |  d¡}|  d¡j}t 	|j 
¡ |¡ t 	|j ¡ |¡ t 	|j d¡|¡ t 	|j d¡|¡ d S )Nr   r8   )rP   ÚnansrP   r   r   )r   r   r'   r(   Úobjectr   r+   rY   r"   Úassert_series_equalr   r%   r$   )r,   r-   r.   r1   r1   r2   Útest_first_last_nth_nan_dtype¦   s    
r\   c               
   C   s€   t tdƒddgtdƒddgdddgd	d
dgiƒ} |  d¡ ¡ }t ddd
ggttdƒtdƒd	gƒtdgddd}t ||¡ d S )Nz2012-01-01 00:00:00r6   r7   z2012-01-02 00:00:00ÚcÚdr   ÚeZaaaarW   r/   z
2012-01-01z
2012-01-02r   ©r   r    )r   r   r   r   r   r"   r#   )Útestr0   r.   r1   r1   r2   Útest_first_strings_timestamps²   s$        üÿ
ýrb   c                  C   s  t dtjgddgddggddgd} |  d¡}t | d¡| jdd	g  d¡¡ t | d¡| jdg  d¡¡ t | d	¡| j	g   d¡¡ t | d
¡| jdd	g  d¡¡ t | d¡| jdg  d¡¡ t | d¡| j	g   d¡¡ t 
|j d¡|  d¡jjdd	g ¡ t 
|j d¡|  d¡jjdg ¡ t |dg  d¡| j	dd	gddgf  d¡¡ |  d¡}t |jddd|jdd	g ¡ t |jd
dd|jdd	g ¡ tj|d< t |jddd|jdd	g ¡ t |jd	dd|jdd	g ¡ t ddddddœddddddœddddddœddddddœd œƒ d!d"g¡} | jdd#d$ d	¡}| jd
g }t ||¡ | jdd#d$ d%¡}| j	g  }t ||¡ t tj dd&d'¡d(d)} | d }| d }| |¡ ¡ }| |¡ d*d+„ ¡}tj
||d#d, |jdkst‚|jdkst‚||dk jd }|jd |ks>t‚|jd |ksRt‚|j|d#d- ¡ }|j|d#d-jdd.d}t 
||¡ tjtd/d0 |j|d#d-jdd1d W 5 Q R X t dtjgddgddggddgd} |  d¡}|jjdd.d}|j ¡ }t 
||¡ t dtjgdd%gddgddgddggddgd} |  d¡}t | d¡| jdd%g  d¡¡ t | dg¡| jdd%g  d¡¡ t | ddg¡| jddd%dg  d¡¡ t | dd
g¡| jdd	d%dg  d¡¡ t | ddd	g¡| jddd	d%dg  d¡¡ t | ddd
g¡| jddd	d%dg  d¡¡ t | d	g¡| jd	g  d¡¡ t | d%dg¡| j	g   d¡¡ tjd2d3dd4}t d|d5d6gd7} | jj| jjg}	| j|	d#d8 dd%dd
g¡}t d9d:d;d<d=d>d?d@dAdBdCdDg¡}
t dd5d6g|
dE}t ||¡ d S )FNr	   r   r   r   r   r
   r   r   r   r   éþÿÿÿéýÿÿÿr   r   r   ZgreenZred)r   r	   r   r   r   ZhamÚeggsZporkgþI|î»ø?gçoB!²¿gHk:!4Àgn‹2d’Ý?gC8fÙ“Àà?g£W”†â?gV¿Òùð,ï¿gN'ÙêrŠð?gÃGÄ”H"é¿gû­(	‰æ?)ÚcolorÚfoodÚtwoÚonerf   rg   F)rR   rG   r   rM   )éd   r   rQ   r8   c                 S   s
   | j d S )Nr   )r*   )Úxr1   r1   r2   Ú<lambda>   ó    ztest_nth.<locals>.<lambda>)Zcheck_names)ÚsortÚallzFor a DataFrame groupby)ÚmatchTz4/1/2014z	6/30/2014)ÚstartÚendÚfreqr6   r7   ©r    r   rF   z2014/4/1z2014/4/4z	2014/4/29z	2014/4/30z2014/5/1z2014/5/6z	2014/5/29z	2014/5/30z2014/6/2z2014/6/5z	2014/6/27z	2014/6/30r`   )r   r'   r(   r   r"   r#   r$   r*   r+   r   r[   r
   ÚrandomÚrandintr   Úapplyr   r)   ÚpytestZraisesÚ
ValueErrorÚpdÚ
date_ranger    ÚyearÚmonthÚto_datetime)r,   r/   Úexpr0   r.   rV   Z	expected2ÚvZbusiness_datesÚkeyZexpected_datesr1   r1   r2   Útest_nthÅ   s¼    $
" " &$0
  
  ûûöÿí
"$

0
"$**..""ôÿr‚   c                 C   s0   |   ddg¡}| d¡}| ¡ }t ||¡ d S )Nr   r
   r   )r   r$   r   r"   r#   ©Zthree_groupr-   r0   r.   r1   r1   r2   Útest_nth_multi_indexA  s    
r„   z#data, expected_first, expected_lastr   z2012-02-01 14:00:00z
US/Central©Útzr	   )rD   Útimer   r
   z2012-01-01 13:00:00zAmerica/New_Yorkz2012-03-01 12:00:00zEurope/Londonr   r   c                 C   sÐ   t | ƒ}|jddd ¡ }t |ƒ}dddg}t || || ¡ |jdddd  ¡ }t ||ddg ¡ |jddd ¡ }t |ƒ}dddg}t || || ¡ |jdddd  ¡ }t ||ddg ¡ d S )NrD   FrF   r‡   r   )r   r   r   r"   r#   r%   )rP   Zexpected_firstZexpected_lastr,   r0   r.   Úcolsr1   r1   r2   Útest_first_last_tzJ  s    6

r‰   zmethod, ts, alphaz
2013-01-01ú
US/Easternz
2013-01-02r7   c                 C   s   t tdƒƒ d¡}tdddg|tjddddd	œƒ}t| d
¡| ƒƒ }ttj|dg|j	d|t
dddgdœtddgd
dd}t ||¡ d S )NÚabcÚcategoryr	   r   Z20130101r   rŠ   )Zperiodsr†   )ÚgroupÚcategory_stringÚ
datetimetzr   r]   r8   z
2013-01-03r…   )rŽ   r   r   r:   )r   rS   Úastyper   rz   r{   r;   r   ZCategoricalr9   r   r   r"   r#   )r4   ÚtsÚalpharŽ   r,   r0   r.   r1   r1   r2   Útest_first_last_tz_multi_column“  s$    	ýÿ ÿüù	r“   r?   TFÚbooleanZInt64z
2020-01-01z
2020-02-01r   )ÚunitÚfunctionÚminÚmaxc           	      C   s„   t ddg| dœƒ}| d¡}tddgdd}t| d|d}t d| i|d}t|d |ƒƒ }t ||¡ | d|i¡}t ||¡ d S )	Nr	   r   r5   r6   r   r7   )r   r    r:   )	r   r   r   r   r;   r"   r[   Zaggr#   )	r?   r–   r,   r-   r@   Zexpected_seriesZexpected_frameZresult_seriesZresult_framer1   r1   r2   Ú+test_first_last_extension_array_keeps_dtype±  s    
r™   c                  C   s´   t dddddddddddgdddddddddddgdddddddddddgdœƒ} |  dd	g¡}| d
¡}t dddddgitjddddgddddggdd	gdd}t ||¡ d S )Nr   r   ri   rh   ZdullZshiny)r   r
   r   r   r
   r   r   ©Únamesr:   )r   r   r$   r   Zfrom_arraysr"   r#   rƒ   r1   r1   r2   Ú test_nth_multi_index_as_expectedË  sb    õõõåÿ+
þþrœ   zop, n, expected_rowsÚheadr   Útailr   rG   c           	      C   sp   t ddgddgddggddgd}|jd|d	}|j| }|d k	rR|| }|| }t|| ƒ|ƒ}t ||¡ d S )
Nr	   r   r   r   r   r   r
   r   rF   ©r   r   r*   r;   r"   r#   )	ÚopÚnZexpected_rowsr   rG   r,   r/   r.   r0   r1   r1   r2   Útest_groupby_head_tail  s    "
r¢   zop, n, expected_colsc                 C   sv   t dddgdddgdddgddd	ggd
ddgd}|jdddgdd}|jd d …|f }t|| ƒ|ƒ}t ||¡ d S )Nr	   r   r   r   r   r   r   é   rN   r   r
   r   r   r   )ZaxisrŸ   )r    r¡   Zexpected_colsr,   r/   r.   r0   r1   r1   r2   Útest_groupby_head_tail_axis_1  s    " ÿr¤   c                  C   s  t ddgddgddggddgd} | jd	dg  d¡}|  d¡}|jdd
}| d	¡}t || ¡ t ||¡ |  d¡}|jdd
}| d	¡}t || ¡ t ||¡ |  d¡}| d	¡}|jdd
}t ||¡ t || ¡ |  d¡}| d	¡}|jdd
}t ||¡ t || ¡ d S )Nr	   r   r   r   r   r   r
   r   r   )r¡   )	r   r*   r+   r   r   r$   r"   r#   rž   )r,   r.   r/   Zresult1Zresult2r1   r1   r2   Útest_group_selection_cache7  s,    "







r¥   c                  C   s   t dgdddgd} |  d¡ d¡}t tg ddddgd}t ||¡ |  ddg¡ d¡}t tg g gg g gddgddgd}t ||¡ d S )	Nr   r6   r7   r]   rt   rM   r   rš   )r   r   r$   r   r"   r#   r   ©r,   r0   r.   r1   r1   r2   Útest_nth_emptyU  s     ÿr§   c                  C   sÐ   t dddgdddgddtjgdddgdd	d
ggdddgd} |  d¡ d¡}t ddgddggddgtddgddd}t ||¡ |  d¡jddd}t ddgd	dggddgtddgddd}t ||¡ d S )Nr	   r7   rj   r6   é2   r   r]   éÈ   r^   é–   r   r   r
   r   r   g      Y@g      i@r   r`   r   r   r   g      I@g     Àb@)r   r'   r(   r   r$   r   r"   r#   r¦   r1   r1   r2   Útest_nth_column_orderc  s$    ,þ  ÿ  ÿr«   r   r   ro   c                 C   sŒ   t tjddgdddgtjddgdd	d
gtjddggtdƒd}| d¡jd| d}t ddgd	d
ggtdƒtddgddd}t ||¡ d S )Nr   r	   r‹   r   r   r   r   Údefr   r   r£   rN   r   r6   r   Zbcr   r`   )	r   r'   r(   rS   r   r$   r   r"   r#   )r   r,   r0   r.   r1   r1   r2   Útest_nth_nan_in_grouperw  s    0þ  ÿr­   c               	   C   s    t dddddgdt d¡g tdddddgd	d
dœƒ} |  d¡ ¡ }t dt d¡g tdddgƒ t dddg¡¡dœƒ}t	dddgdd|_
t ||¡ d S )Nr   ÚsecondÚthirdr   ZNaTr6   r7   r]   rŒ   r8   )r   r‡   Ú
categoriesr   r   )r‡   r°   r   )r   r'   Z
datetime64r   r   r   r   rz   ÚCategoricalDtyper   r    r"   r#   r¦   r1   r1   r2   Ú,test_first_categorical_and_datetime_data_nat†  s     ýÿÿþÿr²   c               
   C   s¸   t dddddgdddddgdddddgdd	d
ddgdœƒ} |  ddi¡} | jddgd ¡ }t dddgtdd
dgƒ t dd
d	dg¡¡dœƒ}tjdddgddgd|_	t
 ||¡ d S )Nr	   r   rj   r©   ZappleZorangeZmangoZjupiterZmercuryZmarsZvenus)r   r
   r   r   r   rŒ   r   r
   )Zby)r   r   )r	   rj   )r	   r©   )r   rj   rš   )r   r   r   r   r   rz   r±   r   Úfrom_tuplesr    r"   r#   r¦   r1   r1   r2   Ú)test_first_multi_key_groupbby_categoricalœ  s*    üÿÿþÿ ÿr´   )+Znumpyr'   rx   Zpandasrz   r   r   r   r   r   r   Zpandas._testingZ_testingr"   r3   ÚmarkZparametrizerA   rB   rI   r(   rZ   rJ   rX   r\   rb   r‚   r„   r‰   r“   r<   r~   Zto_timedeltar™   rœ   r¢   r¤   r¥   r§   r«   r­   r²   r´   r1   r1   r1   r2   Ú<module>   sî    0



þþûþ#|	
ý
ý
ýõ


ýù


þú	

þúîîþ1
þþ
üþ	:øþøþ

