1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
U
®ý°dÕwã@sÐddlZddlZddlZddlmZmZmZmZm    Z    m
Z
ddl m Z ddlmZddlmZejdd„ƒZejdd„ƒZejd    d
„ƒZejd d „ƒZejd d„ƒZejdd„ƒZGdd„dƒZGdd„dƒZdS)éN)Ú    DataFrameÚIndexÚ
MultiIndexÚ
RangeIndexÚSeriesÚ    Timestamp)Úconcat)Úmergec
CsPddddddddddg
}ddddddddddg
}tj t|ƒ¡}t|||d    œƒS)
z=left dataframe (not multi-indexed) for multi-index join testsÚbarÚfooZbazZquxZsnapZtwoZoneZthree©Úkey1Úkey2Údata)ÚnpÚrandomÚrandnÚlenrr ©rú\d:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/tests/reshape/merge/test_multi.pyÚleftsrcCs |}ddg|j_dddg|_|S)z:right dataframe (multi-indexed) for multi-index join testsr rZj_oneZj_twoZj_three)ÚindexÚnamesÚcolumns)Z multiindex_dataframe_random_dataÚdfrrrÚrights  rc
Csbtdddddgdddddgdddddgddd    ddgd
d d d dgdœdddddgd ddddg¡S)NÚAÚBÚCÚAMÚIPÚOPZhbwZnhbZhboiÃi?i¦    iÈi\)ÚOriginÚ DestinationÚPeriodÚTripPurpÚTripsr"r#r$r%r&©r©rÚ    set_indexrrrrÚ
left_multi's     û ø    
÷r*c Csvtdddddddgdddddddgdddddddgd    d
d d
d    d
d    gd d dd dddgdœdddddgd ddddg¡S)NrrrÚEÚFrr r!ÚaÚbÚcédéPéZéKé#é7)r"r#r$ÚLinkTypeÚDistancer"r#r$r6r7r'r(rrrrÚ right_multi5sû ø    
÷r8cCs
dddgS)Nr"r#r$rrrrrÚ on_cols_multiCsr9cCsdddddgS)Nr"r#r$r%r6rrrrrÚidx_cols_multiHsr:c@s eZdZdd„Zej dddg¡dd„ƒZej dddg¡dd    „ƒZd
d „Z    d d „Z
dd„Z dd„Z dd„Z dd„Zdd„Zej ddejeeg¡dd„ƒZej dddg¡dd „ƒZejd!d"„ƒZejd#d$„ƒZejd%d&„ƒZd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„ZdS)1ÚTestMergeMulticCs€ddg}|j|||djdd}t|| ¡||d}t ||¡|j|||ddjdd}t|| ¡||dd}t ||¡dS)Nr r©ÚonÚhowT)Údrop©r=r>Úsort)ÚjoinÚ reset_indexr    ÚtmÚassert_frame_equal)ÚselfrrÚ    join_typeÚon_colsÚresultÚexpectedrrrÚtest_merge_on_multikeyNs ÿÿz%TestMergeMulti.test_merge_on_multikeyrAFTc
sndddg‰dd„‰‡‡fdd„}tttt tdƒtd    ƒd
¡ƒƒ}ttj |d ¡ddgd }|     d
dtj 
d dt |ƒ¡  d¡¡tj  t |ƒ¡}|j| ¡}ˆ|ƒ|d<ˆ|ƒ |d<|jˆdd||||ƒtj|jd
dd…df<tj|jddd…df<tj|jddd…df<ˆ|ƒ|d<tj  t |ƒ¡}|j|dd…f}ˆ|ƒ |d<|jˆdd||||ƒdS)NÚ1stÚ2ndÚ3rdcsBdd„‰‡fdd„}||dƒ||dƒd|d d¡d    S)
NcSs||kr dSt|ƒS)Nr)Úord)r-rrrÚ<lambda>eózNTestMergeMulti.test_left_join_multi_index.<locals>.bind_cols.<locals>.<lambda>cs| ˆ¡tdƒS)Nr-)ÚmaprO)Úts©ZiordrrrPfrQrLrNgY@rMrgˆÃ@)Úfillna)rÚfrrTrÚ    bind_colsds z<TestMergeMulti.test_left_join_multi_index.<locals>.bind_colscsö|j|ˆd|d}t|ƒt|ƒdks*t‚|d ¡ ¡r>t‚|d ¡ ¡rRt‚tj|d|d ddˆ|jdd…dd…fƒ}tj|d|dd|jdks¨t‚|rÂt     ||j
ˆd    d
¡t ||  ¡ˆ|dd }t t|ƒƒ|_t     ||¡dS) Nrr@éÚ4thÚ5thF)Z check_nameséþÿÿÿÚ    mergesort©Úkind)r=rAr>)rBrÚAssertionErrorZisnaÚanyrDZassert_series_equalÚilocÚnamerEÚ sort_valuesr    rCrr)rrrAÚresrIÚout©rWZicolsrrÚ run_assertsisz>TestMergeMulti.test_left_join_multi_index.<locals>.run_assertsr-ÚzrX)iˆér'rièÚfloatrYrZT)Úinplaceérié%éé+éÿÿÿÿ)ÚlistrRÚchrrÚarangerOrrÚchoiceÚinsertÚrandintrZastypeZ permutationraÚcopyr)ÚnanÚloc)rFrArgÚlcrÚirrrfrÚtest_left_join_multi_index`s*
"$   z)TestMergeMulti.test_left_join_multi_indexcCsJddg}|j||dd|d}|j||dd|d}||j}t ||¡dS)Nr rTr)Zleft_onZ right_indexr>rAr)Zright_onZ
left_indexr>rA)r    rrDrE)rFrrrArHZmerged_left_rightZmerge_right_leftrrrÚtest_merge_right_vs_left˜s"ÿÿ
z'TestMergeMulti.test_merge_right_vs_leftcCs ttdƒtjddgdddggddgd    d
d }ttd ƒddddddgd dœƒ}t|| ¡ddgd}ttd ƒddddddgd gdtdƒdœƒ}t     ||¡dS)NérrrXrirnÚlev1Úlev2©rÚAmount)rbZAAABBBr)rr€Úcol©r=)rr€rƒr‚)
rÚrangerÚ from_productrrqr    rCrDrE)rFÚsrrIrJrrrÚ.test_merge_multiple_cols_with_mixed_cols_index©sý üÿz=TestMergeMulti.test_merge_multiple_cols_with_mixed_cols_indexcCs|t dd¡}t |d¡}|ddd…}t||tj d¡dœƒ}t|ddd…|ddd…tj d¡dœƒ}t||dd    dS)
i'rirpi N)r rZvalue1)r rZvalue2Úouter©r>)rDZ rands_arrayrZtilerrrr    )rFr rrZdf2rrrÚ test_compress_group_combinations¼s  &ÿz/TestMergeMulti.test_compress_group_combinationscCsöddg}tdddgdddgd    tjt d
¡tjd d œƒ}t d dg¡}tdddgi|d}|j||d}| ¡}tj    |d<d|j
|j dk|j dk@df<d|j
|j dk|j dk@df<t  ||¡|j|ddd|j||dd}t  ||¡tdddgdddgd    tjdddgdtjd tjt d
¡tjd dœƒ}t d dg¡}tdddgi|d}|j||d}| ¡}tj    |d<d|j
|j dk|j dk@df<d|j
|j dk|j dk@df<t  ||¡|j|dd}|j||dd}t  ||¡dS)NÚk1Úk2rrXriér r
é é©Zdtype)rrŽÚv)rir
)rXr Úv2éé©rr„r\T)r^rk)r=rA)rrŽZk3r“r])rrÚarrayrsÚint64rÚ from_tuplesrBrwrxryrrŽrDrErcÚfloat32Úint32)rFrHrrrrIrJrrrÚ#test_left_join_index_preserve_orderËsH 
ýÿ
 
üÿ    
 z2TestMergeMulti.test_left_join_index_preserve_ordercCsxtddddgddddgddd    d
gdd d d gddd dgddd    dgddddgdd ddgddddgddddgg
ddddgdddddddd d!d"g
d#}tdd ddgddddgdddd"gddd    dgddd    dgdddd gddddgdddd!gdddd$gdd dd%gddddgdd d dgdd d d&gddd    d'ggd(d)d*d+gd, d(d)d*g¡}|j|dddgd-d.}tdddddgddddd!gddddtjgddd    d
d'gdd d d dgdd d d d&gddd dtjgddd    ddgddd    ddgdddddgddddd"gdd dddgdddddgddddd ggddddd+gdddddddddddd d!d"gd#}t ||¡|j|dddgd-d/d0}|jdddgd1d2}t ||¡dS)3NÚXÚYrr-ÚWÚeÚVÚQrÚhÚRÚDr{r.r/rrVÚgÚjÚdZcolaZcolbZcolcÚtagrnrirrXr–r~ér•é    r©rriúÿÿÿi÷ÿÿÿrpéýÿÿÿZcol1Zcol2Zcol3Úvalr'rr<Tr@r\r])rr)rBrrxrDrErc)rFrrrIrJrrrÚ+test_left_join_index_multi_match_multiindexsv
 
 
 
 
 
 
 
 
 
ö
ò
 
 
 
 
 
 
 
 
 
 
 
 
 
ò
ïî            ò î z:TestMergeMulti.test_left_join_index_multi_match_multiindexc CsZtddgddgddgddggdd    gddddgd
}tdd gdd gdd gddgddgddgddgddggddgd d¡}|j|ddd}tddd gddd gdddgdddgddtjgddd gdddgddtjggdd    dgddddddddgd
}t ||¡|j|dddd}|jddd}t ||¡t||     ¡ddd}t
t |ƒƒ|_ t ||¡dS)Nr/rr.rXr-rirnrªr¯r­r“ÚwÚxr©ÚyrhÚrr¡Úqr‡Úcharr'rr<Tr@r\r]©r>r=) rr)rBrrxrDrErcr    rCrrr)rFrrrIrJZ    expected2rrrÚ test_left_join_index_multi_matchFsP
ýø
õ ô
 
ø
ô  z/TestMergeMulti.test_left_join_index_multi_matchcCsªttdƒtj d¡tj d¡tdƒtj d¡dœdddddgd    }td
d tjtjtjgd d tjtjtjgdœƒ}t||ddd}|jdgdd}| |¡}t     
||¡dS)NZabcder•)ÚidÚv1r”ÚdummyÚv3r¹rºr”r»r¼r'r-r.gX9´Èv¾ó?gƒÀÊ¡E¶@)r¹Zsv3rr<rX)Úaxis) rrqrrrrxr    r?rBrDrE)rFrrrIÚrdfrJrrrÚtest_left_merge_na_bugletxs$
 
 
û ø
þÿ
z(TestMergeMulti.test_left_merge_na_bugletc Csúdddgdddgdddgddtjgdddgdd    dgdd    tjgd
d    d gdd    dgg    }t|d d dgd}ddtjgddtjgddtjgd
dtjgd
dtjgdd    tjgg}t|d d dgd}|j|dd}| d¡j| d¡dd}| dtj¡}t ||¡dS)Nižrçø?ri£i¨i²g@ri­g@ÚyearÚpanelrr'rŠr‹iüÿÿ)rrxrr    rUÚreplacerDrE)rFrÚframeZ
other_dataÚotherrIrJrrrÚtest_merge_na_keyss.
 
÷ 
 
 
 
 
 
úz!TestMergeMulti.test_merge_na_keysÚklassNcCsÎtdddgdddgdgd}t |j¡|_|jj}|dk    rB||ƒ}tjd    d
d gtjd }tdddg|d œƒ}|j|d|gdd}t     
||¡t|dddgdddgdœƒ}|j||jjgdd}t     
||¡dS©NrXrirnz
2016-01-01z
2017-01-01z
2018-01-01r-r'iàiáiâr’)r-Zkey_1Úinnerr<)Zkey_0Za_xZa_y© rÚpdÚ to_datetimerrÁrr˜rœr    rDrE)rFrÇrÚ    on_vectorÚ    exp_yearsrJrIrrrÚtest_merge_datetime_index°s ÿ z(TestMergeMulti.test_merge_datetime_indexÚ
merge_typerrcCstdddgitjtdƒdgtdƒdggddgd    d
}ttjgddgd    d gd }tjtdƒdgtdƒdggddgd    }|d kr¾tddgddgdœ|d
}|j|d ddgd}|j|d d}n<tddgddgdœ|d
}|j|dddgd}|j|dd}t ||¡t ||¡dS)NrrÀz
1950-01-01rz
1950-01-02rÚdaterÂr)rrÚstate)rrr)rrÒr·r‹)rÒrr)rrršrr    rBrDrE)rFrÐrrZexpected_indexrJZ results_mergeZ results_joinrrrÚ(test_merge_datetime_multi_index_empty_dfÇsHÿþü
ÿþþûþû z7TestMergeMulti.test_merge_datetime_multi_index_empty_dfcCs6tdddgdddgdddgdœd    d
d gd  d    ¡}|S) NrXrirnrçffffºïAçÍÌÌÌúPAi^)Ú household_idÚmaleÚwealthrÖr×rØr'r()rFÚ    householdrrrrÙösýúùzTestMergeMulti.householdc Cshtdddddddgdddddd    tjgd
d d d d dtjgdddddddgdœddddgd ddg¡}|S)NrXrirnr«Ú nl0000301109Ú nl0000289783Ú gb00b03mlx29Ú lu0197800237Ú nl0000289965úABN AmroÚRobecoúRoyal Dutch ShellúAAB Eastern Europe Equity FundúPostbank BioTech Fondsçð?皙™™™™Ù?ç333333ã?ç333333Ã?çÐ?)rÖÚasset_idrbÚsharerÖrérbrêr')rrrxr))rFÚ    portfoliorrrrës2ù
ù    ì
éèzTestMergeMulti.portfolioc Cs|tddddddgddddddgddddd    d
gd d d dd dgddddddgddddddgdœƒ ddg¡jddddgd}|S)NrrXrÔrÕgxýArßràrárârãrärårærçrèrirnrÚrÛrÜrÝrÞ)r×rØrbrêrÖrérÖrér×rØrbrêr')rr)Úreindex)rFrJrrrrJsBú    úúìÿá 
àÿ#zTestMergeMulti.expectedcCs.| ¡}| ¡}|j|dd}t ||¡dS)NrÉr‹)rwrBrDrE©rFrërÙrJrIrrrÚtest_join_multi_levelsFsz%TestMergeMulti.test_join_multi_levelscCsD| ¡}| ¡}t| ¡| ¡dgdd ddg¡}t ||¡dS)NrÖrÉr<ré)rwr    rCr)rDrErírrrÚ(test_join_multi_levels_merge_equivalenceOsüûz7TestMergeMulti.test_join_multi_levels_merge_equivalencecCsn| ¡}| ¡}|j|dd}t|tddgitjdtjfgddgdd    gd
d d j|j    d }t
  ||¡dS)NrŠr‹rêrär«rÖrérr—rT)r½rAr') rwrBrrrršrrxrìrrDrErírrrÚtest_join_multi_levels_outer\s&
ÿþý óòz+TestMergeMulti.test_join_multi_levels_outerc    Cs„| ¡}| ¡}d|j_tjtdd|j|ddW5QRX| ¡}|j ddg¡tjtdd|j|ddW5QRXdS)Nr z+cannot join with no overlapping index names)ÚmatchrÉr‹rÖz'columns overlap but no suffix specified)rwrrbÚpytestZraisesÚ
ValueErrorrBZ    set_names)rFrërÙZ
portfolio2rrrÚtest_join_multi_levels_invalidrsÿz-TestMergeMulti.test_join_multi_levels_invalidcCstdddddddgddddddtjgd    d
d d d d d    gdœdddgd ddg¡}tdddddgdddddgdddddgdœƒ ddg¡}tddddddddgddddddddgddddddddgd d d d d d d d gddddddddgdœƒ dddg¡jdd gd}t| ¡| ¡dgd!d" dddg¡}t ||¡tddddddddddddg ddddddddddddg ddddddddddddg d    d
d d d d d d d d d d    g ddddddddddddg dœƒ dddg¡jdd gd}t| ¡| ¡dgd#d" dddg¡}t ||¡dS)$NrXrirnr«rÚrÜrÝrÞrärårærçrè)rÖrérêrÖrérêr'éééêéëé´éµg¢Sã緖¸?g×D­¡³°¿g×>²ó¢?g
ûž?gH¨REñ¢?)réÚtÚ
log_returnrú)rÖrérúrêrûrûrÉr<rŠ)    rrrxr)rìr    rCrDrE)rFrÙrûrJrIrrrÚtest_join_multi_levels2„sù    õ òñû û÷ÿîø
øòÿåäÿ!üû ôôôôÔÿ=Ã>ÂÿBüûz&TestMergeMulti.test_join_multi_levels2)Ú__name__Ú
__module__Ú __qualname__rKròÚmarkÚ parametrizer|r}rˆrŒrr°r¸r¿rÆrÚasarrayrrrÏrÓÚfixturerÙrërJrîrïrðrôrürrrrr;Ms6
7
6E2 
 
.
 
 
&     r;c@sLeZdZdd„Zdd„Zej ddej    e
e g¡dd„ƒZ d    d
„Z d d „ZdS) ÚTestJoinMultiMulticCsDt| ¡| ¡||d |¡ ¡}|j||d ¡}t ||¡dS)Nr·r‹)r    rCr)Ú
sort_indexrBrDrE©rFr*r8rGr9r:rJrIrrrÚtest_join_multi_multi"süúÿ z(TestJoinMultiMulti.test_join_multi_multicCs`|j|jd}|j|jd}t| ¡| ¡||d |¡ ¡}|j||d ¡}t ||¡dS)Nr'r·r‹)    r?rr    rCr)rrBrDrErrrrÚtest_join_multi_empty_frames4süúÿ z/TestJoinMultiMulti.test_join_multi_empty_framesÚboxNcCsÎtdddgdddgdgd}t |j¡|_|jj}|dk    rB||ƒ}tjd    d
d gtjd }tdddg|d œƒ}|j|d|gdd}t     
||¡t|dddgdddgdœƒ}|j||jjgdd}t     
||¡dSrÈrÊ)rFr    rrÍrÎrJrIrrrrÏHs ÿ z,TestJoinMultiMulti.test_merge_datetime_indexcCs²tjdddgddgd}tddd    gd
d d gd œ|d}tjddddgddgd}tddddgddddgdœ|d}| |¡}t| ¡| ¡dgdd dddg¡}t ||¡dS)N)ÚK0ZX0)r
ZX1)ÚK1ZX2ÚkeyržrZA0ÚA1ÚA2ZB0ZB1ZB2)rrr—)r
ZY0)r ZY1)ÚK2ZY2)rZY3rŸZC0ZC1ZC2ZC3ZD0ZD1ZD2ZD3)rr¦rÉr<)    rršrrBr    rCr)rDrE)rFZ
index_leftrZ index_rightrrIrJrrrÚtest_single_common_level_s4ÿÿ
ÿþ
ÿþz+TestJoinMultiMulti.test_single_common_levelcCs¢tjddgddggddgd}tjdd    d
gddgd}t|d d d ddgid}t|ddddgid}| |¡}t|d d ddgdddtjgdœd}t ||¡dS)NrXrirnr«r-r.r)r«rX)rnri)rnrXr²r‰ééé()rrr³r r
Zfing)r²r³)    rr†ršrrBrrxrDrE)rFZmidx1Zmidx3rrrIrJrrrÚtest_join_multi_wrong_orderxs
þz.TestJoinMultiMulti.test_join_multi_wrong_order)rýrþrÿrrròrrrrrrrÏrrrrrrr!s 
r)ÚnumpyrròZpandasrËrrrrrrZpandas._testingZ_testingrDZpandas.core.reshape.concatrZpandas.core.reshape.merger    rrrr*r8r9r:r;rrrrrÚ<module>s2    
 
 
    
 
 
 
Y