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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
Ë
nñúhõpã ó,—ddlmZddlmZmZddlmZmZmZm    Z    ddl
Z
ddl Z ddl mZddlmZmZddlmZddlmZdd    lmZmZmZdd
lmZdd lmZmZddlm cm!Z"dd l#m$Z$dd l%m&Z&ddl'm(Z(m)Z)m*Z*ddl+m,Z,ddl-m.Z.ddl/m0Z0erddl1m2Z2m3Z3m4Z4m5Z5ddl6m7Z7ed«ee$dd¬«ddddddddejpdf
                                                            d*d„««Z9                                                                d+d„Z:        d,                            d-d„Z;    d.            d/d„Z<    d.                    d0d „Z=    d.                            d1d!„Z>d"„Z?ed«ee$d#d¬«ejpejpd$œ                                    d2d%„««Z@                                d3                                    d4d&„ZA    d.                            d5d'„ZBd6d7d(„ZC                        d8d)„ZDy)9é)Ú annotations)ÚHashableÚSequence)Ú TYPE_CHECKINGÚCallableÚLiteralÚcastN)Úlib)ÚAppenderÚ Substitution)Úfind_stack_level)Úmaybe_downcast_to_dtype)Ú is_list_likeÚis_nested_list_likeÚ    is_scalar)ÚExtensionDtype)Ú ABCDataFrameÚ    ABCSeries)Ú _shared_docs)ÚGrouper)ÚIndexÚ
MultiIndexÚget_objs_combined_axis)Úconcat)Úcartesian_product)ÚSeries)Ú AggFuncTypeÚAggFuncTypeBaseÚAggFuncTypeDictÚ
IndexLabel©Ú    DataFramez
data : DataFrameÚ pivot_tableé)ÚindentsÚmeanFTÚAllc ó|—t|«}t|«}t|t«rog} g} |D]E} t|||||| ||||    |
¬« }| j    |«| j    t | d| ««ŒGt | | d¬«}|j|d¬«St||||||||||    |
« }|j|d¬«S)N)
ÚvaluesÚindexÚcolumnsÚ
fill_valueÚaggfuncÚmarginsÚdropnaÚ margins_nameÚobservedÚsortÚ__name__r$)ÚkeysÚaxisr#)Úmethod)Ú _convert_byÚ
isinstanceÚlistÚ__internal_pivot_tableÚappendÚgetattrrÚ __finalize__)Údatar)r*r+r-r,r.r/r0r1r2Úpiecesr4ÚfuncÚ_tableÚtables                úLH:\Change_password\venv_build\Lib\site-packages\pandas/core/reshape/pivot.pyr#r#=sò€ô ˜Ó €Eܘ'Ó"€Gä'œ4Ô Ø"$ˆØˆØò    9ˆDÜ+ØØØØØ%ØØØØ)Ø!Øô ˆFð M‰M˜&Ô !Ø K‰Kœ  j°$Ó7Õ 8ð    9ô"v D¨qÔ1ˆØ×!Ñ! $¨}Ð!Ó=Ð=ä "Ø ØØ ØØØØØØØØ ó €Eð × Ñ ˜d¨=Ð Ó 9Ð9óc ól    —||z} |du} | r™t|«rd} t|«}nd} |g}|D]}||vsŒt|«‚g}| |zD]4}t|t«r |j
}    ||vr|j |«Œ6t|«t|j«kr6||}n0|j}| D]}    |j|«}Œt|«}|    tjurdn|    }|j| ||
|¬«}|    tjurJtd„|j j"D««r$t%j&dt(t+«¬«|j-|«}|r7t|t.«r't|j«r|j1d¬    «}|}|j2j4d
kDrž|rœ|j2j6dt|«}g}t9t|«t| ««D]D}|j2j6|}|||vr|j |«Œ4|j |«ŒF|j;||¬ «}|sìt|j2t<«r\t=j>tA|j2jB«|j2j6¬ «}|jE|d |¬«}t|jt<«r\t=j>tA|jjB«|jj6¬ «}|jE|d
|¬«}|
dur"t|t.«r|jGd
¬«}|O|jI|«}|tur6|    s4tjJ|«r|jMtNjP«}|r9|r#||jS«jUd
¬«}tW|||||||||¬«    }| r; s9|jj4d
kDr |jjYd «|_    t|«d k(rt|«d kDr |jZ}t|t.«r|r|j1dd
¬«}|S#t$rYŒPwxYw#tttf$rYŒÿwxYw)zL
    Helper of :func:`pandas.pivot_table` for any non-list ``aggfunc``.
    NTF)r1r2r/c3ó4K—|]}|j–—Œy­w©N)Ú_passed_categorical)Ú.0Úpings  rCú    <genexpr>z)__internal_pivot_table.<locals>.<genexpr>­sèø€ò*Ø%)ˆ× Õ ñ*ùs‚zÀThe default value of observed=False is deprecated and will change to observed=True in a future version of pandas. Specify observed=False to silence this warning and retain the current behavior)ÚcategoryÚ
stacklevelÚall)Úhowr$©r,©Únamesr)r5r,©r5)ÚrowsÚcolsr-r1r0r,)rOr5).rr9ÚKeyErrorr8rÚkeyr;Ú    TypeErrorÚlenr+ÚdropÚ
ValueErrorr
Ú
no_defaultÚgroupbyÚanyÚ_grouperÚ    groupingsÚwarningsÚwarnÚ FutureWarningr Úaggrr/r*ÚnlevelsrRÚrangeÚunstackrÚ from_arraysrÚlevelsÚreindexÚ
sort_indexÚfillnaÚ
is_integerÚastypeÚnpÚint64ÚnotnarNÚ _add_marginsÚ    droplevelÚT)r>r)r*r+r-r,r.r/r0r1r2r4Ú values_passedÚ values_multiÚiÚ    to_filterÚxrWÚ observed_boolÚgroupedÚaggedrBÚ index_namesÚ
to_unstackÚnameÚms                          rCr:r:vsB€ð  7‰?€Dà $Ð&€MÙÜ ˜Ô ؈Lܘ&“\‰Fà ˆLؐXˆFðò    "ˆAؘŠ}ܘq“kÐ!ð    "ðˆ    Ø˜‘ò    ˆAܘ!œWÔ%Ø—E‘Eð ؘ‘9Ø×$Ñ$ QÔ'øð     ô ˆy‹>œC § ¡ Ó-Ò -ؘ    ‘?‰D𗑈Øò    ˆCð ØŸ™ SÓ)‘ð    ô
f“ˆà%¬¯©Ñ7‘E¸X€M؏l‰l˜4¨-¸dÈ6ˆlÓR€GØ”3—>‘>Ñ!¤cñ*Ø-4×-=Ñ-=×-GÑ-Gô*ô'ô     ‰ ð Uô#Ü'Ó)õ     
ð K‰K˜Ó  €Eá ”*˜U¤LÔ1´c¸%¿-¹-Ô6HØ— ‘   Ó'ˆà €Eð ‡{{×јQÒ¡5ð—k‘k×'Ñ'¨ ¬#¨e«*Ð5ˆ ؈
Ü”s˜5“z¤3 t£9Ó-ò    (ˆAØ—;‘;×$Ñ$ QÑ'ˆD؈|˜t {Ñ2Ø×!Ñ! !Õ$à×!Ñ! $Õ'ð     (ð — ‘ ˜j°Z Ó@ˆá Ü e—k‘k¤:Ô .Ü×&Ñ&Ü! %§+¡+×"4Ñ"4Ó5¸U¿[¹[×=NÑ=NôˆAð—M‘M !¨!¸
MÓCˆEä e—m‘m¤ZÔ 0Ü×&Ñ&Ü! %§-¡-×"6Ñ"6Ó7¸u¿}¹}×?RÑ?RôˆAð—M‘M !¨!¸
MÓCˆEà ˆt|œ
 5¬,Ô7Ø× Ñ  aРÓ(ˆàÐØ— ‘ ˜ZÓ(ˆØ ”c‰>¡(¬s¯~©~¸jÔ/Ið—L‘L¤§¡Ó*ˆEá٠ؘŸ
™
› ×(Ñ(¨aÐ(Ó0Ñ1ˆDÜØ Ø Ø ØØØØØ%Ø!ô
 
ˆñ™\¨e¯m©m×.CÑ.CÀaÒ.GØŸ ™ ×/Ñ/°Ó2ˆŒ Ü
ˆ5ƒzQ‚œ3˜w›<¨!Ò+Ø—‘ˆô%œÔ&©6Ø— ‘  ¨Q Ó/ˆà €LøôAò Úð ûôœz¬8Ð4ò Úð ús$Á'R Â7RÒ     RÒRÒR3Ò2R3c    
ó0—t|t«s td«‚d|›d}    |jjD]*}
||jj |
«vsŒ!t|    «‚t ||||«} |jdk(rF|jjddD]*}
||jj |
«vsŒ!t|    «‚t|«dkDr|fdt|«dz
zz} n|} |s5t|t«r%|j|j| | |i««S|r+t||||||||«} t| t«s| S| \}}}n;t|t«sJ‚t!|||||||«} t| t«s| S| \}}}|j#|j|¬«}|D]&}t|t«r    | |||<Œ| |d||<Œ(dd    lm}||t)| g«¬
«j*}|jj}t-|j.«D]M}t|t0«rŒ|j3|g«j}||j5t6|f¬ «||<ŒO|j|«}||j_|S) Nz&margins_name argument must be a stringzConflicting name "z " in marginsér$©ÚrPrr!)r+)Úargs)r8Ústrr[r*rRÚget_level_valuesÚ_compute_grand_marginÚndimr+rYrÚ_appendÚ _constructorÚ_generate_marginal_resultsÚtuplerÚ)_generate_marginal_results_without_valuesrjÚpandasr"rrtÚsetÚdtypesrÚ select_dtypesÚapplyr)rBr>r)rTrUr-r1r0r,ÚmsgÚlevelÚ grand_marginrWÚmarginal_result_setÚresultÚ margin_keysÚ
row_marginÚkr"Ú margin_dummyÚ    row_namesÚdtypes                      rCrrrrs©€ô l¤CÔ (ÜÐAÓBÐBà ˜|˜n¨LÐ
9€CØ—‘×"Ñ"ò"ˆØ ˜5Ÿ;™;×7Ñ7¸Ó>Ò >ܘS“/Ð !ð"ô)¨¨v°wÀ ÓM€Là ‡zzQ‚à—]‘]×(Ñ(¨¨Ð,ò    &ˆEؘuŸ}™}×=Ñ=¸eÓDÒDÜ  “oÐ%ð    &ô
 ˆ4ƒy1‚}؈o ¬¨T«°Q©Ñ 7Ñ7‰àˆá ”j ¬    Ô2ð}‰}˜U×/Ñ/°°lÀ<Ñ6PÐ0QÓRÓSÐSá    Ü8Ø 4˜  t¨W°hÀ ó
ÐôÐ-¬uÔ5Ø&Ð &Ø*=Ñ'ˆ ™Zô˜%¤Ô.Ð.Ð.ÜGØ 4˜˜t W¨h¸ ó
ÐôÐ-¬uÔ5Ø&Ð &Ø*=Ñ'ˆ ˜Zà×#Ñ# F§N¡N¸zÐ#ÓJ€Jà ò/ˆÜ aœÔ Ø(¨™OˆJqŠMà(¨¨1©Ñ.ˆJqŠMð    /õ !á˜Z´¸°u³Ô>×@Ñ@€Là— ‘ ×"Ñ"€IôV—]‘]Ó#ò
ˆÜ eœ^Ô ,à à×#Ñ# U GÓ,×4Ñ4ˆØ)¨$Ñ/×5Ñ5Ü #¨5¨(ð6ó
ˆ TÒð 
ð^‰^˜LÓ )€FØ"€F‡LLÔà €MrDcó€—|rši}||j«D]€\}}    t|t«rt||««||<nUt|t«r:t||t«rt|||««||<n|||«||<n ||«||<Œ‚|S|||j «iS#t
$rYŒ¤wxYwrG)Úitemsr8r†r<ÚdictrXr*)r>r)r-r0r–r›Úvs       rCrˆrˆUsҀñ؈ ؘ‘L×&Ñ&Ó(ò     ‰DˆAˆqð ܘg¤sÔ+Ø&9¤g¨a°Ó&9Ó&;L ’OÜ ¬Ô.Ü! '¨!¡*¬cÔ2Ø*@¬'°!°W¸Q±ZÓ*@Ó*B˜  Qšà*4¨'°!©*°Q«-˜  Qšá&-¨a£jL ‘Oøð     ðÐà™g d§j¡jÓ1Ð2Ð2øô    ò Ùð úsŸA:B1Â1    B=Â<B=cóÚ‡‡—t‰«dkDrßg}g}    ˆˆfd„}
t|«dkDrŸ|||zj||¬«j|«} d} |jjd|¬«D]S\} }|j}|
| «}|j    «}| | ||<|j |«|    j |«ŒUnddlm}d} |jd|¬«D]é\} }t‰«dkDr    |
| «}n‰}|j |«||j|««j}t|jt«r6tj|g|jjdgz¬«|_
n't|g|jj¬«|_
|j |«|    j |«Œë|s|St!|| ¬    «}t|«dk(r|S|}|j"}    t‰«dkDr«|‰|zj‰|¬«j|«}|j%d
¬ «}t‰«gt't)t‰«««z}|Dcgc]}|jj|‘Œ}}|jj+|«|_
n+|j-t.j0|j"¬ «}||    |fScc}w) Nrcó0•—|‰fdt‰«dz
zzS)Nrƒr$©rY)rWrUr0s €€rCÚ_all_keyz,_generate_marginal_results.<locals>._all_key|s ø€Ø˜Ð&¨´#°d³)¸a±-Ñ)@Ñ@Ð @rD©r1r$)r•r1r!rQ©rrST)Ú future_stack©r*)rYr]rdrtÚcopyr;rr"r“r8r*rÚ from_tuplesrRrrrr+Ústackr9rfÚreorder_levelsÚ_constructor_slicedroÚnan)rBr>r)rTrUr-r1r0Ú table_piecesr™r¦ÚmarginÚcat_axisrWÚpieceÚall_keyr"Útransformed_piecer˜ršÚnew_order_indicesrwÚnew_order_namess    `  `               rCrŒrŒls´ù€ô ˆ4ƒy1ƒ}àˆ Øˆ õ    Aô ˆt‹9qŠ=ؘ$ ™-Ñ(×0Ñ0°ÀÐ0ÓI×MÑMÈgÓVˆF؈Hà#Ÿg™gŸo™o°AÀ˜oÓIò     ,‘
UØŸ™Ù" 3›-ðŸ
™
› Ø!'¨¡g‘à×#Ñ# EÔ*Ø×"Ñ" 7Õ+ò     ,õ )àˆHØ#Ÿm™m°!¸h˜mÓGò ,‘
Uܐt“9˜q’=Ù& s›m‘Gà*GØ×#Ñ# EÔ*ñ%.¨e¯k©k¸'Ó.BÓ$C×$EÑ$EÐ!ܘeŸk™k¬:Ô6ä.8×.DÑ.DØ ˜    ¨¯©×):Ñ):¸d¸VÑ)Cô/Ð%Õ+ô/4°W°IÀEÇKÁK×DTÑDTÔ.UÐ%Ô+ð×#Ñ#Ð$5Ô6Ø×"Ñ" 7Õ+ð' ,ñ*àˆLä˜L¨xÔ8ˆFä ˆt‹9˜Š>؈MàˆØ—m‘mˆ ä
ˆ4ƒy1‚}ؘ$ ™-Ñ(×0Ñ0°ÀÐ0ÓI×MÑMÈgÓVˆ
Ø×%Ñ%°4Ð%Ó8ˆ
ô! ›Y˜K¬$¬u´S¸³YÓ/?Ó*@Ñ@ÐØ>OÖP¸˜:×+Ñ+×1Ñ1°!Ó4ÐPˆÐPØ%×+Ñ+×:Ñ:¸?ÓKˆ
Õà×-Ñ-¬b¯f©f¸F¿N¹NÐ-ÓKˆ
à ; 
Ð *Ð*ùò QsÉ5 K(có2‡‡—t‰«dkDrŸg}ˆˆfd„}t|«dkDrE|j||¬«|j|«}    |«}
|    ||
<|} |j|
«nR|jdd|¬«j|«}    |«}
|    ||
<|} |j|
«| S|} |j}t‰«r&|j‰|¬«‰j|«} n%t t j| j¬«} | || fS)NrcóN•—t‰«dk(r‰S‰fdt‰«dz
zzS)Nr$rƒr¥)rUr0s€€rCr¦z;_generate_marginal_results_without_values.<locals>._all_keyÎs.ø€Ü4‹y˜AŠ~Ø#Ð#Ø ? U¬c°$«i¸!©mÑ%<Ñ<Ð <rDr§)r•r5r1rª)rYr]r“r;r+rror°) rBr>rTrUr-r1r0r™r¦r²rµr˜ršs    `  `      rCrŽrŽÀs ù€ô ˆ4ƒy1‚}àˆ õ    =ô
ˆt‹9qŠ=Ø—\‘\ $°\Ó:¸4Ñ@×FÑFÀwÓOˆFÙ“jˆGØ#ˆE'‰N؈FØ × Ñ ˜wÕ 'ð—\‘\¨°¸H\ÓE×KÑKÈGÓTˆFÙ“jˆGØ#ˆE'‰N؈FØ × Ñ ˜wÔ '؈MàˆØ—m‘mˆ ä
ˆ4„yØ—\‘\ $°\Ó:¸4Ñ@×FÑFÀwÓO‰
äœBŸF™F¨&¯.©.Ô9ˆ
à ; 
Ð *Ð*rDcó²—|€g}|St|«s5t|tjtt
t f«s t|«r|g}|St|«}|SrG)    rr8roÚndarrayrrrÚcallabler9)Úbys rCr7r7ísX€Ø    €zØ ˆð €Iô    "Œ Ü bœ2Ÿ:™:¤u¬i¼ÐAÔ BÜ BŒ<àˆTˆð €Iô"‹XˆØ €IrDÚpivot)r*r)có¶—tj|«}|jd¬«}|jj«|_|jjDcgc]}||nt
j ‘Œc}|j_|t
j urT|t
j urtj|«}ng}|t
j u}|j||z|¬«}nv|t
j ur“t|jt«rFt|jj«D    cgc]}    |jj|    «‘Œ}
}    nX|j|j|jj¬«g}
n%tj|«D cgc]} || ‘Œ    }
} |D cgc]} || ‘Œ    } } |
j| «tj |
«}t#|«rIt|t$«s9t't(t*|«}|j-||j.||¬«}n |j||j.|¬«}|j1|«}|jjDcgc]}|t
j ur|nd‘Œc}|j_|Scc}wcc}    wcc} wcc} wcc}w)NF)Údeep)r;r¨)r*r+rª)ÚcomÚconvert_to_list_liker«r*rRr
r\Ú    set_indexr8rrfrer‡r¯rÚextendrhrrr    rrr‹Ú_valuesrg)r>r+r*r)Úcolumns_listlikerrUr;ÚindexedrwÚ
index_listÚidxÚcolÚ data_columnsÚ
multiindexr˜s                rCr¿r¿ûsr€ô×/Ñ/°Ó8Ðð
9‰9˜%ˆ9Ó  €DØ—‘—‘Ó"€D„JàAEÇÁ×AQÑAQöØ9=Ð ‰¤c§n¡nÑ4ò€D‡JJÔð
”—‘ÑØ œŸ™Ñ &Ü×+Ñ+¨EÓ2‰DàˆDàœ#Ÿ.™.Ð(ˆð—.‘.Ø Ð#Ñ #¨Fð!ó
Šð
”C—N‘NÑ "ܘ$Ÿ*™*¤jÔ1ô=BÀ$Ç*Á*×BTÑBTÓ<UöØ78D—J‘J×/Ñ/°Õ2ð
ñð
×,Ñ,¨T¯Z©Z¸d¿j¹j¿o¹oÐ,ÓNð‘
ô03×/GÑ/GÈÓ/NÖO¨˜$˜s›)ÐOˆJÐOà-=Ö> c˜˜S›    Ð>ˆ Ð>Ø×ј,Ô'Ü×+Ñ+¨JÓ7ˆ
ä ˜Ô ¬
°6¼5Ô(Aäœ(¤8Ñ,¨fÓ5ˆFØ×'Ñ'ؐV‘ ×$Ñ$¨JÀð(ó‰Gð×.Ñ.¨t°F©|×/CÑ/CÈ:Ð.ÓVˆGð_‰_Ð-Ó .€FàAGÇÁ×ASÑASöØ9=œCŸN™NÑ*‰°Ñ4ò€F‡LLÔð €Mùòiùò,ùòPùâ>ùò sÁKÄ?"KÆ. K Ç KÊKc
 
ó¦—|€ | td«‚| |€ td«‚t|«s|g}t|«s|g}d}
||zD cgc]} t| ttf«sŒ| ‘Œ} } | rt | dd¬«}
t ||d¬«}t ||d    ¬«}t||«\} }}}d
d lm    }itt||««¥tt||««¥}|||
¬ «}|€d
|d <td
dœ}n    ||d <d|i}|j    d|||||ddœ|¤Ž}|    durt||    ||¬«}|j| d
¬«}|j|d¬«}|Scc} w)aº
    Compute a simple cross tabulation of two (or more) factors.
 
    By default, computes a frequency table of the factors unless an
    array of values and an aggregation function are passed.
 
    Parameters
    ----------
    index : array-like, Series, or list of arrays/Series
        Values to group by in the rows.
    columns : array-like, Series, or list of arrays/Series
        Values to group by in the columns.
    values : array-like, optional
        Array of values to aggregate according to the factors.
        Requires `aggfunc` be specified.
    rownames : sequence, default None
        If passed, must match number of row arrays passed.
    colnames : sequence, default None
        If passed, must match number of column arrays passed.
    aggfunc : function, optional
        If specified, requires `values` be specified as well.
    margins : bool, default False
        Add row/column margins (subtotals).
    margins_name : str, default 'All'
        Name of the row/column that will contain the totals
        when margins is True.
    dropna : bool, default True
        Do not include columns whose entries are all NaN.
    normalize : bool, {'all', 'index', 'columns'}, or {0,1}, default False
        Normalize by dividing all values by the sum of values.
 
        - If passed 'all' or `True`, will normalize over all values.
        - If passed 'index' will normalize over each row.
        - If passed 'columns' will normalize over each column.
        - If margins is `True`, will also normalize margin values.
 
    Returns
    -------
    DataFrame
        Cross tabulation of the data.
 
    See Also
    --------
    DataFrame.pivot : Reshape data based on column values.
    pivot_table : Create a pivot table as a DataFrame.
 
    Notes
    -----
    Any Series passed will have their name attributes used unless row or column
    names for the cross-tabulation are specified.
 
    Any input passed containing Categorical data will have **all** of its
    categories included in the cross-tabulation, even if the actual data does
    not contain any instances of a particular category.
 
    In the event that there aren't overlapping indexes an empty DataFrame will
    be returned.
 
    Reference :ref:`the user guide <reshaping.crosstabulations>` for more examples.
 
    Examples
    --------
    >>> a = np.array(["foo", "foo", "foo", "foo", "bar", "bar",
    ...               "bar", "bar", "foo", "foo", "foo"], dtype=object)
    >>> b = np.array(["one", "one", "one", "two", "one", "one",
    ...               "one", "two", "two", "two", "one"], dtype=object)
    >>> c = np.array(["dull", "dull", "shiny", "dull", "dull", "shiny",
    ...               "shiny", "dull", "shiny", "shiny", "shiny"],
    ...              dtype=object)
    >>> pd.crosstab(a, [b, c], rownames=['a'], colnames=['b', 'c'])
    b   one        two
    c   dull shiny dull shiny
    a
    bar    1     2    1     0
    foo    2     2    1     2
 
    Here 'c' and 'f' are not represented in the data and will not be
    shown in the output because dropna is True by default. Set
    dropna=False to preserve categories with no data.
 
    >>> foo = pd.Categorical(['a', 'b'], categories=['a', 'b', 'c'])
    >>> bar = pd.Categorical(['d', 'e'], categories=['d', 'e', 'f'])
    >>> pd.crosstab(foo, bar)
    col_0  d  e
    row_0
    a      1  0
    b      0  1
    >>> pd.crosstab(foo, bar, dropna=False)
    col_0  d  e  f
    row_0
    a      1  0  0
    b      0  1  0
    c      0  0  0
    Nz&aggfunc cannot be used without values.z)values cannot be used without an aggfunc.TF)Ú    intersectr2Úrow)ÚprefixrËrr!rªÚ    __dummy__)r-r,r-)r*r+r.r0r/r1)Ú    normalizer.r0)r*r5r$)r+r5)rÒ)r[rr8rrrÚ
_get_namesÚ_build_names_mapperrr"r¡ÚziprYr#Ú
_normalizeÚ rename_axis)r*r+r)ÚrownamesÚcolnamesr-r.r0r/rÓÚ
common_idxryÚ    pass_objsÚrownames_mapperÚunique_rownamesÚcolnames_mapperÚunique_colnamesr"r>ÚdfÚkwargsrBs                      rCÚcrosstabrãBs»€ðT€~˜'Ð-ÜÐAÓBÐBà Иg˜oÜÐDÓEÐEä ˜uÔ %ؐˆÜ ˜wÔ 'ؐ)ˆà€JØ! G™OÖXq¬z¸!¼iÌÐ=VÕ/W’ÐX€IÐXÙÜ+¨IÀÈEÔRˆ
ä˜% °%Ô8€Hܘ' 8°EÔ:€Hô    ˜H hÓ/ñ ØØØØõ!ð Ü
Œs? EÓ*Ó
+ð ä
Œs? GÓ,Ó
-ð €Dñ
4˜zÔ    *€Bà €~؈ˆ;‰Ü °Ñ2‰à ˆˆ;‰Ø˜WÐ%ˆð ˆBN‰NØð     àØØØ!ØØñ     ð ñ     €Eð˜ÑÜØ ˜Y°Àlô
ˆð × Ñ  O¸!Ð Ó <€EØ × Ñ  o¸AÐ Ó >€Eà €LùòiYs ÁEÁ EcóŒ—t|ttf«s dddœ}    ||}|dur2d„d„d„d    œ}|d
|d <    ||}||«}|j d «}|S|d ur¤|j }|j}    |jd dd…fj}
||
v||
k7zrt    |›d«‚|jdd …d f} |jd dd …f} |jdd …dd …f}t||d¬«}|dk(r<| | j«z } t|| gd¬«}|j d «}|    |_|S|dk(r>| | j«z } |j| «}|j d «}||_|S|d
k(s|d urv| | j«z } | | j«z } d| j|<t|| gd¬«}|j| «}|j d «}||_|    |_|St    d«‚t    d«‚#t$r}t    d«|‚d}~wwxYw#t$r}t    d«|‚d}~wwxYw)Nr*r+)rr$zNot a valid normalize argumentFcóL—||jd¬«jd¬«z S©Nr$rSr©Úsum©rys rCú<lambda>z_normalize.<locals>.<lambda>üs#€˜Q §¡¨A £×!2Ñ!2¸Ð!2Ó!:Ñ:€rDcó(—||j«z SrGrçrés rCrêz_normalize.<locals>.<lambda>ýs€  Q§U¡U£W¡€rDcóH—|j|jd¬«d¬«Sræ)Údivrèrés rCrêz_normalize.<locals>.<lambda>þs€˜qŸu™u Q§U¡U° U£]¸˜uÓ;€rD)rNr+r*rNTréÿÿÿÿz not in pivoted DataFrame)rÓr.r$rSzNot a valid margins argument)r8Úboolr†rVr[rlr*r+Úilocrr×rèrrŠÚloc) rBrÓr.r0Ú    axis_subsÚerrÚ normalizersÚfÚ table_indexÚ table_columnsÚlast_ind_or_colÚ column_marginÚ index_margins              rCr×r×ïs³€ô i¤$¬ Ô -Ø IÑ.ˆ    ð    HØ! )Ñ,ˆIð%Ññ;Ù,Ù;ñ3
ˆ ð (¨Ñ.ˆ DÑð    HؘIÑ&ˆAñ%“ˆØ— ‘ ˜Q“ˆðf €Lðc
DŠà—k‘kˆ ØŸ ™ ˆ ØŸ*™* Rª UÑ+×0Ñ0ˆð  Ð /°LÀOÑ4SÒ TÜ  ˜~Ð-FÐGÓHÐ HØŸ
™
 3 B 3¨ 7Ñ+ˆ Ø—z‘z " c r c 'Ñ*ˆ ð—
‘
˜3˜B˜3   ˜8Ñ$ˆô˜5¨I¸uÔEˆð ˜    Ò !Ø)¨M×,=Ñ,=Ó,?Ñ?ˆMܘE =Ð1¸Ô:ˆEØ—L‘L “OˆEØ)ˆEŒMð2 €Lð/˜'Ò !Ø'¨,×*:Ñ*:Ó*<Ñ<ˆLØ—M‘M ,Ó/ˆEØ—L‘L “OˆEØ%ˆEŒKð& €Lð#˜%Ò  9°Ñ#4Ø)¨M×,=Ñ,=Ó,?Ñ?ˆMØ'¨,×*:Ñ*:Ó*<Ñ<ˆLØ-.ˆL× Ñ ˜\Ñ *ܘE =Ð1¸Ô:ˆEØ—M‘M ,Ó/ˆEà—L‘L “OˆEØ%ˆEŒKØ)ˆEŒMð €Lô Ð=Ó>Ð >ôÐ7Ó8Ð8øôIò    HÜÐ=Ó>ÀCÐ Gûð    Hûôò    HÜÐ=Ó>ÀCÐ Gûð    Hús.H ¸H)È     H&È H!È!H&È)    IÈ2 H>È>IcóN—|€eg}t|«D]S\}}t|t«r(|j|j    |j«Œ>|j    |›d|›«ŒU|St |«t |«k7r t d«‚t|t«s t|«}|S)NÚ_z*arrays and names must have the same length)Ú    enumerater8rrr;rYÚAssertionErrorr9)ÚarrsrRrÑrwÚarrs     rCrÔrÔ?s™€Ø €}؈ܠ“oò    .‰FˆAˆsܘ#œyÔ)¨c¯h©hÐ.BØ— ‘ ˜SŸX™XÕ&à— ‘  ˜x q¨¨˜_Õ-ð        .ð €Lô ˆu‹:œ˜T›Ò "Ü Ð!MÓNÐ Nܘ%¤Ô&ܘ“KˆEà €LrDcóâ—d„}t|«jt|««}||«||«z|z}t|«Dcic]\}}||vsŒ d|›|“Œ}}}t|«Dcgc]\}}||vrd|›n|‘Œ}}}t|«Dcic]\}}||vsŒ d|›|“Œ}    }}t|«Dcgc]\}}||vrd|›n|‘Œ}
}}|||    |
fScc}}wcc}}wcc}}wcc}}w)a¤
    Given the names of a DataFrame's rows and columns, returns a set of unique row
    and column names and mappers that convert to original names.
 
    A row or column name is replaced if it is duplicate among the rows of the inputs,
    among the columns of the inputs or between the rows and the columns.
 
    Parameters
    ----------
    rownames: list[str]
    colnames: list[str]
 
    Returns
    -------
    Tuple(Dict[str, str], List[str], Dict[str, str], List[str])
 
    rownames_mapper: dict[str, str]
        a dictionary with new row names as keys and original rownames as values
    unique_rownames: list[str]
        a list of rownames with duplicate names replaced by dummy names
    colnames_mapper: dict[str, str]
        a dictionary with new column names as keys and original column names as values
    unique_colnames: list[str]
        a list of column names with duplicate names replaced by dummy names
 
    cóJ—t«}|Dchc]    }||vsŒ|’Œ c}Scc}wrG)r)rRÚseenrs   rCÚget_duplicatesz+_build_names_mapper.<locals>.get_duplicatesns$€Ü“EˆØ!&Ö;˜¨$°dÒ*:’Ò;Ð;ùÒ;s     ™ Úrow_Úcol_)rÚ intersectionrý) rÙrÚrÚ shared_namesÚ    dup_namesrwrrÝrÞrßràs            rCrÕrÕPs?€ò<<ôx“=×-Ñ-¬c°(«mÓ<€LÙ˜xÓ(©>¸(Ó+CÑCÀlÑR€Iô)2°(Ó(;÷Ù$˜Q ¸tÀyÒ?Pˆ$ˆqˆcˆ
DÑð€OñôBKÈ8ÓAT÷Ù6=°a¸d˜iÑ'ˆ$ˆqˆc‰
¨TÑ1ð€Oñô
)2°(Ó(;÷Ù$˜Q ¸tÀyÒ?Pˆ$ˆqˆcˆ
DÑð€OñôBKÈ8ÓAT÷Ù6=°a¸d˜iÑ'ˆ$ˆqˆc‰
¨TÑ1ð€Oñð ˜O¨_¸oÐ MÐMùóùóùóùós$Á     CÁCÁ/C C%Â"C%Â;C+)r>r"r-rr.rïr/rïr0rr1úbool | lib.NoDefaultr2rïÚreturnr")r>r"r-z!AggFuncTypeBase | AggFuncTypeDictr.rïr/rïr0rr1r
r2rïr r")r'N)rBzDataFrame | Seriesr>r"r1rïr0r)r')r>r"r0r)r>r"r1rïr0r)rBr"r>r"r1rïr0r)
r>r"r+r r*úIndexLabel | lib.NoDefaultr)r r r")NNNNFr'TF)
r.rïr0rr/rïrÓz/bool | Literal[0, 1, 'all', 'index', 'columns']r r")rBr"r.rïr0rr r")rÐ)rÑr†)rÙú    list[str]rÚr r z;tuple[dict[str, str], list[str], dict[str, str], list[str]])EÚ
__future__rÚcollections.abcrrÚtypingrrrr    raÚnumpyroÚ pandas._libsr
Úpandas.util._decoratorsr r Úpandas.util._exceptionsr Úpandas.core.dtypes.castrÚpandas.core.dtypes.commonrrrÚpandas.core.dtypes.dtypesrÚpandas.core.dtypes.genericrrÚpandas.core.commonÚcoreÚcommonrÂÚpandas.core.framerÚpandas.core.groupbyrÚpandas.core.indexes.apirrrÚpandas.core.reshape.concatrÚpandas.core.reshape.utilrÚpandas.core.seriesrÚpandas._typingrrrr rr"r\r#r:rrrˆrŒrŽr7r¿rãr×rÔrÕ©rDrCú<module>r$sNðÝ"÷÷óó ãå÷õ5å;÷ñõ
5÷÷
!РÝ*Ý'÷ñõ
.Ý6Ý%á÷óõ!ñ
Ð"Ó#Ù    ˆ,}Ñ
%¨qÔ1ð Ø
Ø Ø!ØØØØ"Ø%(§^¡^Øð4:Ø
ð4:ð
ð 4:ðð4:ð ð4:ðð4:ð#ð4:ð ð4:ðò4:ó2ó$ð4:ðnGØ
ðGð
/ð GððGð ðGððGð#ðGð ðGðóGðd#ØðRØ ðRà
ðRððRðóRðl@Eð3Ø
ð3Ø4<ó3ð>#ðQ+à
ðQ+ððQ+ðóQ+ðv#ð*+Ø ð*+à
ð*+ð ð *+ðó*+òZ ñÐ"Ó#Ù    ˆ,wÑ
¨Ô+ð
),¯©Ø),¯©ñ BØ
ðBððBð &ð    Bð
'ð Bð ò Bó,ó$ðBðP Ø Ø Ø ØØ"ØØAFðjððjððjð ðjð?ðjðójð\JOðMØ ðMØ*.ðMØ>FðMàóMô`ð"3NØð3NØ#,ð3Nà@ô3NrD