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
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
Ë
nñúh¤–ãó—dZddlmZddlZddlZddlmZmZmZm    Z    m
Z
ddl Z ddl mZmZddlmcmZddlmZmZmZmZmZddlmZddlmZdd    lmZm Z dd
l!m"Z"m#Z#m$Z$m%Z%m&Z&dd l'm(Z(m)Z)dd l*m+Z+dd l,m-Z-ddl.m/Z/m0Z0m1Z1m2Z2ddl3m4Z4ddl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;erddl<m=Z=m>Z>m?Z?ddl@mAZAd$d„ZBd„ZCGd„d«ZDGd„d«ZEGd„deE«ZFd%d„ZGGd„de    e«ZHGd„deH«ZIGd „d!eH«ZJdd"œ                                                    d&d#„ZKy)'a
Provide classes to perform the groupby aggregate operations.
 
These are not exposed to the user and provide implementations of the grouping
operations, primarily in cython. These classes (BaseGrouper and BinGrouper)
are contained *in* the SeriesGroupBy and DataFrameGroupBy objects.
é)Ú annotationsN)Ú TYPE_CHECKINGÚAnyÚCallableÚGenericÚfinal)ÚNaTÚlib)Ú    ArrayLikeÚAxisIntÚNDFrameTÚShapeÚnpt©ÚAbstractMethodError)Úcache_readonly)Úmaybe_cast_pointwise_resultÚmaybe_downcast_to_dtype)Úensure_float64Ú ensure_int64Úensure_platform_intÚ ensure_uint64Úis_1d_only_ea_dtype)ÚisnaÚ
maybe_fill)Ú    DataFrame)Úgrouper)ÚCategoricalIndexÚIndexÚ
MultiIndexÚ ensure_index)ÚSeries)Úcompress_group_indexÚdecons_obs_group_idsÚget_flattened_listÚget_group_indexÚget_group_index_sorterÚget_indexer_dict)ÚHashableÚIteratorÚSequence)ÚNDFramecób—t|tj«r|tk7r t    d«‚yy)NzMust produce aggregated value)Ú
isinstanceÚnpÚndarrayÚobjectÚ
ValueError)ÚobjÚdtypes  úJH:\Change_password\venv_build\Lib\site-packages\pandas/core/groupby/ops.pyÚcheck_result_arrayr6Qs1€ô#”r—z‘zÔ"Ø ”FŠ?ôÐ<Ó=Ð =ð ð#ócóz—t|d«r.|j}|jdk(rt|«dk(r|d}|S)zb
    Extract the result object, it might be a 0-dim ndarray
    or a len-1 0-dim, or a scalar
    Ú_valuesér)Úhasattrr9ÚndimÚlen)Úress r5Úextract_resultr?\s:€ô
ˆsIÔàk‰kˆØ 8‰8qŠ=œS ›X¨š]àa‘&ˆCØ €Jr7có.—eZdZUdZegd¢«Zd<d„Zideje    jd¬«“deje    jd¬«“dd“d    d
“d eje    jd ¬ «“d eje    jd ¬ «“dd“dd“dd“dd“dd“deje    jd¬ «“deje    jd¬ «“dd“dd“dd“d d!“d"d#d$d%d&d'œd(œZ d)ed*<d d+iZed=d,„«Zeej$                                d>d-„««Zd?d.„Zd@d/„ZdAd0„ZdAd1„Zed2d2d3d4œ                                                            dBd5„«Zed3d6œ                                                            dBd7„«ZedCd8„«Zed9d:œ                                            dDd;„«Zy2)EÚWrappedCythonOpaB
    Dispatch logic for functions defined in _libs.groupby
 
    Parameters
    ----------
    kind: str
        Whether the operation is an aggregate or transform.
    how: str
        Operation name, e.g. "mean".
    has_dropped_na: bool
        True precisely when dropna=True and the grouper contains a null value.
    )ÚanyÚallÚrankÚcountÚsizeÚidxminÚidxmaxcó.—||_||_||_y©N©ÚkindÚhowÚhas_dropped_na)ÚselfrLrMrNs    r5Ú__init__zWrappedCythonOp.__init__~s€ØˆŒ    ØˆŒØ,ˆÕr7rB)Úval_testrCÚsumÚ    group_sumÚprodÚ
group_prodrG)ÚnamerHÚminÚ    group_minÚmaxÚ    group_maxÚmeanÚ
group_meanÚmedianÚgroup_median_float64ÚvarÚ    group_varÚstdÚsemÚskewÚ
group_skewÚfirstÚ    group_nthÚlastÚ
group_lastÚohlcÚ
group_ohlcÚ group_cumprodÚ group_cumsumÚ group_cumminÚ group_cummaxÚ
group_rank)ÚcumprodÚcumsumÚcumminÚcummaxrD)Ú    aggregateÚ    transformzdict[str, dict]Ú_CYTHON_FUNCTIONSécó(—||jdvryy)Nrtru)rv)ÚclsrMs  r5Úget_kind_from_howz!WrappedCythonOp.get_kind_from_how¢s€à #×'Ñ'¨ Ñ4Ñ 4ØØr7có^—|j}|j||}t|«r|}ntt|«}|r|S|t j t«k(rF|dvrtd|›d|›d«‚|dvr|S|dk(r    |Sd|jvrtd|›d|›d«‚|Std|«‚)    N)r]rpz2function is not implemented for this dtype: [how->z,dtype->ú])rarbrGrHrcr1zPThis should not be reached. Please report a bug at github.com/pandas-dev/pandas/)
rVrvÚcallableÚgetattrÚ
libgroupbyr/r4r1ÚNotImplementedErrorÚ__signatures__)ryrLrMr4Ú
is_numericÚ    dtype_strÚftypeÚfs        r5Ú_get_cython_functionz$WrappedCythonOp._get_cython_functionªsó€ð
—J‘Jˆ    Ø×%Ñ% dÑ+¨CÑ0ˆô EŒ?؉Aäœ
 EÓ*ˆA٠؈HØ ”b—h‘hœvÓ&Ò &ØÐ+Ñ+ä)ðØ ˜E ¨)¨°Að7óððÐ:Ñ:àØ˜’àðˆHð  ×!1Ñ!1Ñ1ä)ðØ ˜E ¨)¨°Að7óððˆHä%ð0àóð r7có2—|j}|dvr t|«}|S|jjdvra|dvs|jdk(r|jr t|«}|S|dvr1|jjdk(r t |«}|St |«}|S)zÖ
        Cast numeric dtypes to float64 for functions that only support that.
 
        Parameters
        ----------
        values : np.ndarray
 
        Returns
        -------
        values : np.ndarray
        )r]rarbrcÚiu)r_r[ru)rRrirTrqrpÚi)rMrr4rLrNrr)rOÚvaluesrMs   r5Ú_get_cython_valsz WrappedCythonOp._get_cython_valsÕs«€ðh‰hˆà Ð2Ñ 2ô$ FÓ+ˆFð"ˆ ð\‰\× Ñ  $Ñ &ؐoÑ%Ø—    ‘    ˜[Ò(¨T×-@Ò-@ô(¨Ó/ðˆ ðÐDÑDà—<‘<×$Ñ$¨Ò+Ü)¨&Ó1Fðˆ ô+¨6Ó2Fàˆ r7cóð—|j}|j}|jj|d«}|dk(r||f}|S|dkDr t    d«‚|dk(r|j
}|S|f|j
ddz}|S)Nr:riz<arity of more than 1 is not supported for the 'how' argumentru)rMrLÚ _cython_arityÚgetr€Úshape)rOÚngroupsrŠrMrLÚarityÚ    out_shapes       r5Ú_get_output_shapez!WrappedCythonOp._get_output_shapeúsš€Øh‰hˆØy‰yˆà×"Ñ"×&Ñ& s¨AÓ.ˆð &Š=Ø  %Ð(ˆIðÐðQŠYÜ%ØNóð ð[Ò  ØŸ ™ ˆIðÐð!˜
 V§\¡\°!°"Ð%5Ñ5ˆIØÐr7có¸—|j}|dk(rd}n2|dvrd}n+|jdvr|j›|j›}nd}tj|«S)NrDÚfloat64©rGrHÚintpÚiufcbr1)rMrLÚitemsizer/r4)rOr4rMÚ    out_dtypes    r5Ú_get_out_dtypezWrappedCythonOp._get_out_dtype s^€Øh‰hˆà &Š=Ø!‰IØ Ð(Ñ (ð‰Iàz‰z˜WÑ$Ø$Ÿz™z˜l¨5¯>©>Ð*:Ð;‘    à$    Üx‰x˜    Ó"Ð"r7có2—|j}|dvrA|tjt«k(r#tjtj«S|S|dvrA|j
dvr|S|j
dvr#tjtj «S|S)a 
        Get the desired dtype of a result based on the
        input dtype and how it was computed.
 
        Parameters
        ----------
        dtype : np.dtype
 
        Returns
        -------
        np.dtype
            The desired dtype of the result.
        )rRrqrRrTrp)r[r]r_rarbÚfcÚiub)rMr/r4ÚboolÚint64rLr•)rOr4rMs   r5Ú_get_result_dtypez!WrappedCythonOp._get_result_dtypes€€ðh‰hˆà Ð=Ñ =ØœŸ™¤›Ò&Ü—x‘x¤§¡Ó)Ð)ð ˆ ð Ð;Ñ ;؏z‰z˜TÑ!ؐ Ø—‘˜uÑ$Ü—x‘x¤§
¡
Ó+Ð+؈ r7Nr)ÚmaskÚ result_maskÚinitialc
ó —|jdk(r\|ddd…f}    |    |ddd…f}|    |ddd…f}|j|    f||||||dœ|¤Ž}
|
jddk(r|
dS|
jS|j|f||||||dœ|¤ŽS)Nr:)Ú    min_countrÚcomp_idsr¢r£r¤r)r<Ú_call_cython_oprÚT) rOrŠr¦rr§r¢r£r¤ÚkwargsÚvalues2dr>s            r5Ú_cython_op_ndim_compatz&WrappedCythonOp._cython_op_ndim_compat7sـð ;‰;˜!Ò à˜d¢A˜g‘ˆHØÐؘD¢!˜G‘}ØÐ&Ø)¨$²¨'Ñ2 Ø&$×&Ñ&Øð    à#ØØ!ØØ'Øñ    ðñ    ˆCðy‰y˜‰|˜qҠؘ1‘v ð—5‘5ˆLà#ˆt×#Ñ#Ø ð    
àØØØØ#Øñ    
ðñ    
ð        
r7)r¤c ó
—|}    |j}
|
jdv} |
jdv} | r|jd«}d} n |
jdk(r|jd«}|jdk(r|jtj
«}|j dvrv|€ t|«}|
tk(r*|d    r%|j«r|j«}d||<|jtd
¬ «jtj«}d} |j}||j}| |j}|j||«} |j|j|j |j| «}|j!|«}|j#|j«}t%t    j&| |¬ ««}|jd k(rt    j(|tj*¬ «}|j dvr&|j dk(r||d<|d#|||||||| dœ|¤ŽnÝ|j dvr$|j dvr| |d<|||||f|||dœ|¤Žn«|j dvr&|d#|||||dœ|¤Ž|jtd
¬ «}nw|j dvr.|d#||||||dœ|¤Ž|
tk(rQ|jt«}n;t-|j ›d«‚|j dk7r||d<|d#||||| |dœ|¤Ž|jd k(r”|j dvr†|jjdvrn| slt/|j dvrd nd!|«}|k}|j«r;|||j1«s&J‚|jd"«}tj2||<|j}|j |j4vr)|j7|    j«}t9||«}|S|}|S)$Nr˜ÚmMr TÚbÚuint8Úfloat16)rBrCÚskipnaF)Úcopy©r4rt)rGrHrWrYr[rgrerRrRr¤)ÚoutÚcountsrŠÚlabelsr¦r¢r£Úis_datetimelike)rbrar_rirTr])rarbr¸)r¦r¢r£)rµrŠr·r¢r£)rc)rµr¶rŠr·r¢r£z is not implementedrDr£)rµrŠr·rr¸r¢r–rˆ)rRrTrr:r•©)r4rLÚviewÚastyper/Úfloat32rMrr1rBr³rŸÚint8r©r“r†r‹r›rÚemptyÚzerosr r€rYrCÚnanÚcast_blocklistr¡r)rOrŠr¦rr§r¢r£r¤rªÚ orig_valuesr4r‚r¸r’ÚfuncršÚresultr¶ÚcutoffÚ empty_groupsÚ    res_dtypeÚ    op_results                      r5r¨zWrappedCythonOp._call_cython_opfs%€ðˆ à— ‘ ˆØ—Z‘Z 7Ð*ˆ
àŸ*™*¨Ð,ˆá Ø—[‘[ Ó)ˆF؉JØ Z‰Z˜3Ò Ø—[‘[ Ó)ˆFØ <‰<˜9Ò $Ø—]‘]¤2§:¡:Ó.ˆFà 8‰8~Ñ %؈|ܘF“|ØœŠØ˜(Ò#à—x‘x”zà!'§¡£˜Ø'+˜˜t™ Ø—]‘]¤4¨e]Ó4×9Ñ9¼"¿'¹'ÓBˆF؈Jà—‘ˆØ Ð Ø—6‘6ˆDØÐ&Ø)Ÿm™m à×*Ñ*¨7°FÓ;ˆ    Ø×(Ñ(¨¯©°D·H±H¸f¿l¹lÈJÓWˆØ×&Ñ& vÓ.ˆØ×'Ñ'¨¯ © Ó5ˆ    äœBŸH™H Y°iÔ@ÓAˆØ 9‰9˜ Ó #Ü—X‘X˜g¬R¯X©XÔ6ˆF؏x‰xð    ñ    ð—8‘8˜uÒ$ð)0F˜9Ñ%Ùð
ØØ!Ø!Ø#Ø'ØØ +Ø$3ñ
ðó
ð—‘ÐLÑLØ—8‘8˜~Ñ-Ø0?FÐ,Ñ-ÙØØØØð        ð
(ØØ +ñ    ðó    ð—‘˜^Ñ+ÙðØØ!Ø#ØØ +ñ ð ò ð Ÿ™¤t°%˜Ó8‘Ø—‘˜XÑ%ÙðØØ!Ø!Ø#ØØ +ñ ðòðœF’?Ø#Ÿ]™]¬6Ó2‘Fô*¨T¯X©X¨JÐ6IÐ*JÓKÐKðx‰x˜6Ò!à(3}Ñ%Ù ð ØØØØØ /Øñ  ðò ð 9‰9˜ Ò #¨¯©Ð8LÑ(Lð|‰|× Ñ  DÑ(±ä $§(¡(¨oÑ"=™QÀ1ÀiÓPØ%¨™ Ø×#Ñ#Ô%Ø"Ð.Ø*¨<Ñ8×<Ñ<Ô>Ð>Ð>ð"(§¡¨yÓ!9˜Ü/1¯v©v˜˜|Ñ,à—‘ˆà 8‰8˜4×.Ñ.Ñ .ð
×.Ñ.¨{×/@Ñ/@ÓAˆIÜ/°¸    ÓBˆIðÐðˆIàÐr7cóª—|jdkDr td«‚|jdk(r |dk(sJ|«‚yt|j«s|dk(sJ‚yy)Néz.number of dimensions is currently limited to 2r:r)r<r€rr4)rOÚaxisrŠs   r5Ú_validate_axiszWrappedCythonOp._validate_axis    sU€à ;‰;˜Š?Ü%Ð&VÓWÐ WØ ;‰;˜!Ò Ø˜1’9Ð "˜dÓ "‘9Ü$ V§\¡\Ô2ð˜1’9Ð ‘9ð3r7éÿÿÿÿ)r¦c     óâ—|j||«t|tj«s,|jd|j
|j |||dœ|¤ŽS|j|f|||ddœ|¤ŽS)zW
        Call our cython function, with appropriate pre- and post- processing.
        )rMrNr¦rÚidsN)r¦rr§r¢r¹)rÌr.r/r0Ú _groupby_oprMrNr¬)rOrŠrËr¦r§rrªs       r5Úcython_operationz WrappedCythonOp.cython_operations”€ð     ×јD &Ô)ä˜&¤"§*¡*Ô-à%6×%Ñ%ðØ—H‘HØ#×2Ñ2Ø#ØØñ ð ñ ð ð+ˆt×*Ñ*Ø ð
àØØØñ 
ð ñ 
ð    
r7)rLÚstrrMrÒrNrŸÚreturnÚNone)rMrÒrÓrÒ)rLrÒrMrÒr4únp.dtyper‚rŸ)rŠú
np.ndarrayrÓrÖ)rÚintrŠrÖrÓr)r4rÕrÓrÕ)rŠrÖr¦r×rr×r§rÖr¢únpt.NDArray[np.bool_] | Noner£rØr¤rrÓrÖ)rËr rŠr rÓrÔ) rŠr rËr r¦r×r§rÖrr×rÓr )Ú__name__Ú
__module__Ú __qualname__Ú__doc__Ú    frozensetrÁrPÚ    functoolsÚpartialrÚ group_any_allÚgroup_idxmin_idxmaxr`rvÚ__annotations__rÚ classmethodrzÚcacher†r‹r“r›r¡rr¬r¨rÌrÑr¹r7r5rArAjsN…ñ ñÚCó€Nó-ð 
Ø Ð$9×$Ñ$ Z×%=Ñ%=ÈÔNð
à Ð$9×$Ñ$ Z×%=Ñ%=ÈÔNð
ð ;ð
ð Lð    
ð
Ð'i×'Ñ'¨
×(FÑ(FÈXÔVð 
ð Ð'i×'Ñ'¨
×(FÑ(FÈXÔVð 
ð ;ð
ð ;ð
ð Lð
ð Ð,ð
ð ;ð
ð Ð$9×$Ñ$ Z×%9Ñ%9ÀÔFð
ð Ð$9×$Ñ$ Z×%9Ñ%9ÀÔFð
ð Lð
ð [ð
𠠐Lð!
ð" Lð#
ð('Ø$Ø$Ø$Ø ñ 
ñ)*Аóð:˜QK€Màòóðð؇__ð'Øð'Ø ð'Ø)1ð'Ø?Cò'óóð'óR#óJó&#ó ð4 ð.2Ø48Øñ,
àð,
ðð    ,
ð
ð ,
ð ð ,
ð+ð,
ð2ð,
ðð,
ð
ò,
ó ð,
ð\ ðñ`àð`ðð    `ð
ð `ð ð `ð+ð`ð2ð`ðð`ð
ò`ó ð`ðD òó ðð ð ñ !
ðð!
ðð    !
ð
ð !
ð ð !
ðð!
ð
ò!
ó ñ!
r7rAcóЗeZdZUdZded<        d#                                    d$d„Zed%d„«Zed&d„«Zd'd„Z    ed(d„«Z
    d)                    d*d    „Z e d)d+d
„«Z e ed „««Zed,d „«Ze d-d „«Ze ed.d„««Zed/d„«Zed0d„«Ze d1d„«Zed2d„«Ze ed3d„««Ze ed3d„««Zed4d„«Zed-d„«Ze         d5d„«Ze ed(d„««Zed6d„«Zed7d„«Ze d8d„«Ze     d9                                    d:d„«Z e     d;                            d<d„«Z!e                         d=d„«Z"e     d)                            d>d„«Z#e ed-d „««Z$e ed-d!„««Z%y")?Ú BaseGrouperaŒ
    This is an internal Grouper class, which actually holds
    the generated groups
 
    Parameters
    ----------
    axis : Index
    groupings : Sequence[Grouping]
        all the grouping instances to handle in this grouper
        for example for grouper list to groupby, need to pass the list
    sort : bool, default True
        whether this grouper will give sorted result or not
 
    rrËcó|—t|t«sJ|«‚||_t|«|_||_||_yrJ)r.rrËÚlistÚ
_groupingsÚ_sortÚdropna)rOrËÚ    groupingsÚsortrës     r5rPzBaseGrouper.__init__Ks9€ô˜$¤Ô&Ð,¨Ó,Ð&àˆŒ    Ü26°y³/ˆŒØˆŒ
؈ r7có—|jSrJ)ré©rOs r5rìzBaseGrouper.groupingsYs €à‰Ðr7có:—td„|jD««S)Nc3ó4K—|]}|j–—Œy­wrJ)r)Ú.0Úpings  r5ú    <genexpr>z$BaseGrouper.shape.<locals>.<genexpr>_sèø€Ò= dT—\•\Ñ=ùs‚)Útuplerìrïs r5rzBaseGrouper.shape]s€äÑ=¨d¯n©nÔ=Ó=Ð=r7có,—t|j«SrJ)ÚiterÚindicesrïs r5Ú__iter__zBaseGrouper.__iter__as€ÜD—L‘LÓ!Ð!r7có,—t|j«SrJ)r=rìrïs r5ÚnkeyszBaseGrouper.nkeysds€ä4—>‘>Ó"Ð"r7c#óvK—|j||¬«}|j}t||«Ed{–—†y7Œ­w)úš
        Groupby iterator
 
        Returns
        -------
        Generator yielding sequence of (name, subsetted object)
        for each group
        ©rËN)Ú _get_splitterÚgroup_keys_seqÚzip)rOÚdatarËÚsplitterÚkeyss     r5Ú get_iteratorzBaseGrouper.get_iteratorhs8èø€ð×%Ñ% d°Ð%Ó6ˆØ×"Ñ"ˆÜt˜XÓ&×&Ò&ús ‚/9±7²9cól—|j\}}}t||||j|j|¬«S)zV
        Returns
        -------
        Generator yielding subsetted objects
        )Ú
sorted_idsÚsort_idxrË)Ú
group_inforÿÚ _sorted_idsÚ    _sort_idx)rOrrËrÏÚ_rs      r5rÿzBaseGrouper._get_splitterws<€ðŸ/™/‰ˆˆQÜØ Ø Ø Ø×'Ñ'Ø—^‘^Øô 
ð    
r7có´—t|j«dk(r|jdS|j\}}}t    |||j|j
«S©Nr:r)r=rìÚlevelsr    r%Úcodes©rOrÏr rs    r5rzBaseGrouper.group_keys_seqˆsM€ô ˆt~‰~Ó  !Ò #Ø—;‘;˜q‘>Ð !à"Ÿo™o‰OˆCGô& c¨7°D·K±KÀÇÁÓLÐ Lr7cóP—t|j«dk(r3t|jt«r|jdj
S|jDcgc]}|j ‘Œ}}|jDcgc]}|j‘Œ}}t||«Scc}wcc}w)z"dict {group name -> group indices}r:r)    r=rìr.Ú result_indexrrørÚ _group_indexr()rOróÚ
codes_listrs    r5røzBaseGrouper.indices“s‡€ô ˆt~‰~Ó  !Ò #¬
°4×3DÑ3DÔFVÔ(Wà—>‘> !Ñ$×,Ñ,Ð ,Ø-1¯^©^Ö< Td—j“jÐ<ˆ
Ð<Ø.2¯n©nÖ= d×!Ó!Ð=ˆÐ=Ü 
¨DÓ1Ð1ùò=ùÚ=s ÁBÁ=B#có’—t|j|j|jd¬«}t    ||j¬«\}}|j
r8t j|dk\«}t j|dk(«|}||}t||j«}|j
r|t j|«z }|S)zR
        Get the original integer locations of result_index in the input.
        T©ríÚxnull©rírrÍ) r&rrrêr#rNr/Úwhererqr'rÚtake)rOÚ group_indexr r¢Ú    null_gapsrÄs      r5Ú result_ilocszBaseGrouper.result_ilocssª€ô&Ø J‰J˜Ÿ
™
¨¯©¸4ô
ˆ ô.¨kÀÇ
Á
ÔK‰ˆ Qà × Ò Ü—8‘8˜K¨1Ñ,Ó-ˆD䟠   ™     +°Ñ"3Ó4°TÑ:ˆIØ% dÑ+ˆKä'¨ °T·\±\ÓBˆà × Ò à ”b—g‘g˜i¨Ó0Ñ 0ˆFàˆ r7cóT—|jDcgc]}|j‘Œc}Scc}wrJ)rìr©rOrós  r5rzBaseGrouper.codes¸s €ð(,§~¡~Ö6˜t—
“
Ò6Ð6ùÒ6ó%cóT—|jDcgc]}|j‘Œc}Scc}wrJ)rìrr s  r5rzBaseGrouper.levels½s €à.2¯n©nÖ= d×!Ó!Ò=Ð=ùÒ=r!cóT—|jDcgc]}|j‘Œc}Scc}wrJ)rìrVr s  r5ÚnameszBaseGrouper.namesÁs€à&*§n¡nÖ5˜d—    “    Ò5Ð5ùÒ5r!có˜—|j\}}}|rtj||dk7|¬«}ng}t||jdd¬«S)z&
        Compute group sizes.
        rÍ)Ú    minlengthr F)Úindexr4r³)r    r/Úbincountr"r)rOrÏr rrµs     r5rFzBaseGrouper.sizeÅsJ€ð
Ÿ/™/‰ˆˆQá Ü—+‘+˜c #¨¡)™n¸Ô@‰CàˆCܐc ×!2Ñ!2¸'ÈÔNÐNr7có–—t|j«dk(r|jdjSg}|jD]X}|j}t    |t
«s|j |«Œ1|j |jdj«ŒZtj|«}|jj|«S)ú!dict {group name -> group labels}r:r) r=rìÚgroupsÚgrouping_vectorr.ræÚappendr Ú from_arraysrËÚgroupby)rOÚ
to_groupbyróÚgvr's     r5r+zBaseGrouper.groupsÒsª€ô ˆt~‰~Ó  !Ò #Ø—>‘> !Ñ$×+Ñ+Ð +àˆJØŸ™ò GØ×)Ñ)Ü! "¤kÔ2Ø×%Ñ% bÕ)à×%Ñ% b§l¡l°1¡o×&EÑ&EÕFð  Gô ×*Ñ*¨:Ó6ˆEØ—9‘9×$Ñ$ UÓ+Ð +r7cóF—t|jd«jS©Nr)rr    Úis_monotonic_increasingrïs r5Ú is_monotoniczBaseGrouper.is_monotonicâs€ôT—_‘_ QÑ'Ó(×@Ñ@Ð@r7cóT—t|jddkj««S)zE
        Whether grouper has null value(s) that are dropped.
        r)rŸr    rBrïs r5rNzBaseGrouper.has_dropped_naès&€ô T—_‘_ QÑ'¨!Ñ+×0Ñ0Ó2Ó3Ð3r7có^—|j«\}}t|«}t|«}|||fSrJ)Ú_get_compressed_codesr=r)rOr§Ú obs_group_idsrs    r5r    zBaseGrouper.group_infoðs6€à"&×"<Ñ"<Ó">ш-ämÓ$ˆÜ& xÓ0ˆà˜¨Ð/Ð/r7có&—|j\}}}|SrJ)r    ©rOrÏr s   r5Ú
codes_infozBaseGrouper.codes_infoùs€ð—O‘O‰    ˆˆQØˆ
r7cóL—t|j«dkDr:t|j|jdd¬«}t ||j ¬«S|jd}|jtjt|j«tj¬«fS)Nr:Trrrr´) r=rìr&rrr#rêr/Úarangerr—)rOrrós   r5r8z!BaseGrouper._get_compressed_codesÿsx€ô
ˆt~‰~Ó  Ò "Ü)¨$¯*©*°d·j±jÀtÐSWÔXˆKÜ'¨ ¸$¿*¹*ÔEÐ Eð~‰~˜aÑ ˆØz‰zœ2Ÿ9™9¤S¨×):Ñ):Ó%;Ä2Ç7Á7ÔKÐKÐKr7có,—t|j«SrJ)r=rrïs r5rzBaseGrouper.ngroups s€ô4×$Ñ$Ó%Ð%r7cón—|j}|j\}}}t|||j|d¬«S)NT)r)rr    r$r)rOrrÏÚobs_idsr s     r5Úreconstructed_codeszBaseGrouper.reconstructed_codess1€à—
‘
ˆØŸ/™/‰ˆˆWaÜ# C¨°$·*±*¸eÈ4ÔPÐPr7có6—t|j«dk(r5|jdjj|jd«S|j
}|jDcgc]}|j‘Œ}}t ||d|j¬«Scc}w)Nr:rF)rrÚverify_integrityr$)r=rìÚ _result_indexÚrenamer$rBr )rOrrórs    r5rzBaseGrouper.result_indexsƒ€ä ˆt~‰~Ó  !Ò #Ø—>‘> !Ñ$×2Ñ2×9Ñ9¸$¿*¹*ÀQ¹-ÓHÐ Hà×(Ñ(ˆØ15·±Ö@¨$×$Ó$Ð@ˆÐ@ÜØ ¸ÀdÇjÁjô
ð    
ùòAsÁ(Bcó,—t|j«dk(r|jdjgSg}t|j|j«D]<\}}t |«}|jj |«}|j|«Œ>|Sr)r=rìÚ_group_arraylikerrBrrr-)rOÚ    name_listrórrs     r5Úget_group_levelszBaseGrouper.get_group_levels"sŒ€ô ˆt~‰~Ó  !Ò #Ø—N‘N 1Ñ%×6Ñ6Ð7Ð 7àˆ    Ü˜tŸ~™~¨t×/GÑ/GÓHò    %‰KˆD%Ü'¨Ó.ˆEØ×*Ñ*×/Ñ/°Ó6ˆFà × Ñ ˜VÕ $ð        %ð Ðr7c     ó¦—|dvsJ‚t|||j¬«}|j\}}    }    |j}
|jd|||||
dœ|¤ŽS)z;
        Returns the values of a cython operation.
        )rurtrK)rŠrËr¦r§rr¹)rArNr    rrÑ) rOrLrŠrMrËr¦rªÚcy_oprÏr rs            r5Ú_cython_operationzBaseGrouper._cython_operation5sr€ðÐ1Ñ1Ð1Ð1ä T¨sÀ4×CVÑCVÔWˆà—O‘O‰    ˆˆQØ—,‘,ˆØ%ˆu×%Ñ%ð
ØØØØØñ 
ð ñ 
ð    
r7cóà—t|jtj«sd}|j    ||«}t j |d¬«}|rt||jd¬«}|S|}|S)a1
        Parameters
        ----------
        obj : Series
        func : function taking a Series and returning a scalar-like
        preserve_dtype : bool
            Whether the aggregation is known to be dtype-preserving.
 
        Returns
        -------
        np.ndarray or ExtensionArray
        TF)Ú    try_float)Ú numeric_only)    r.r9r/r0Ú_aggregate_series_pure_pythonr
Úmaybe_convert_objectsrr4)rOr3rÃÚpreserve_dtyperÄÚnpvaluesrµs       r5Ú
agg_serieszBaseGrouper.agg_seriesQsj€ô"˜#Ÿ+™+¤r§z¡zÔ2ð
"ˆNà×3Ñ3°C¸Ó>ˆä×,Ñ,¨V¸uÔEˆÙ Ü-¨h¸¿    ¹    ÐPTÔUˆCðˆ
ðˆC؈
r7có—|j\}}}tj|d¬«}d}|j|d¬«}t    |«D]7\}}    ||    «}
t |
«}
|st |
|    j«d}|
||<Œ9|S)NÚOr´FrrþT)r    r/r¾rÿÚ    enumerater?r6r4) rOr3rÃr rrÄÚ initializedrr‰Úgroupr>s            r5rQz)BaseGrouper._aggregate_series_pure_pythonrsŽ€ðŸ™‰ ˆˆ1ˆgä—‘˜'¨Ô-ˆØˆ à×%Ñ% c°Ð%Ó2ˆä! (Ó+ò        ‰HˆAˆuِu“+ˆCÜ  Ó%ˆCáä" 3¨¯ © Ô4Ø" àˆF1ŠIð        ðˆ r7cóz—d}|j||¬«}|j}g}t||«}|D]R\}    }
tj    |
d|    «|
j
} ||
«} |st | | |«sd}|j| «ŒTt|«dk(r$t|dd«dvr||jdd«||fS)NFrþrVTrrÙ)rcrRrT) rÿrrr1Ú __setattr__ÚaxesÚ_is_indexed_liker-r=r~Úiloc) rOr…rrËÚmutatedrÚ
group_keysÚ result_valuesÚzippedÚkeyrZÚ
group_axesr>s              r5Úapply_groupwisezBaseGrouper.apply_groupwiseŠs܀ðˆØ×%Ñ% d°Ð%Ó6ˆØ×(Ñ(ˆ
؈ ôZ Ó*ˆà ò     &‰JˆCô × Ñ ˜u f¨cÔ 2🙈JِE“(ˆCÙÔ#3°C¸ÀTÔ#JØØ ×  Ñ   Õ %ð     &ô ˆz‹?˜aÒ ¤G¨A¨z¸4Ó$@ðE
ñ%
ñ ˆdi‰i˜˜ˆmÔ à˜gÐ%Ð%r7có:—|j\}}}t||«SrJ)r    r'rs    r5r zBaseGrouper._sort_idx´s €ðŸ/™/‰ˆˆQÜ% c¨7Ó3Ð3r7cóX—|j\}}}|j|j«SrJ)r    rr r;s   r5r
zBaseGrouper._sorted_ids»s&€ð—O‘O‰    ˆˆQØx‰x˜Ÿ™Ó'Ð'r7N)TT)
rËrrìzSequence[grouper.Grouping]rírŸrërŸrÓrÔ©rÓzlist[grouper.Grouping])rÓr)rÓzIterator[Hashable]©rÓrשr)rr rËr rÓz#Iterator[tuple[Hashable, NDFrameT]])rr,rËr rÓÚ DataSplitter)rÓz$dict[Hashable, npt.NDArray[np.intp]]©rÓúnpt.NDArray[np.intp])rÓz#list[npt.NDArray[np.signedinteger]]©rÓz list[Index]©rÓzlist[Hashable])rÓr")rÓzdict[Hashable, np.ndarray])rÓrŸ©rÓz6tuple[npt.NDArray[np.intp], npt.NDArray[np.intp], int])rÓz:tuple[npt.NDArray[np.signedinteger], npt.NDArray[np.intp]])rÓzlist[npt.NDArray[np.intp]]©rÓr)rÓzlist[ArrayLike])rÍ)
rLrÒrMrÒrËr r¦r×rÓr )F)r3r"rÃrrSrŸrÓr )r3r"rÃrrÓznpt.NDArray[np.object_])r…rrzDataFrame | SeriesrËr rÓztuple[list, bool])&rÙrÚrÛrÜrârPÚpropertyrìrrùrûrrrÿrrrørrrr$rFr+r5rNr    r<r8rrBrrJrMrUrQrfr r
r¹r7r5ræræ9sn…ñ ð ƒKð Øð àð ð.ð ðð     ð
ð ð
ó ðòóððò>óð>ó"ðò#óð#ð/0ð 'Øð 'Ø$+ð 'à    ,ó 'ð ó
ó ð
ð  ØñMóó ðMðò2óð2ð òó ðð4 Ø ò7óó ð7ðò>óð>ðò6óð6ð ò
Oó ð
Oðò ,óð ,ð ØòAóó ðAð Øò4óó ð4ð ò0óð0ðòóðð
 ð
Là    Cò
Ló ð
Lð Øò&óó ð&ðòQóðQð
ò
óð
ð ò ó ð ð$ ðð 
àð
ðð    
ð
ð 
ð ð 
ð
ò
ó ð
ð6 àBGðØðØ!)ðØ;?ðà    òó ðð@ ðØðØ!)ðà     òó ðð. àEFð$&Øð$&Ø!3ð$&Ø;Bð$&à    ò$&ó ð$&ðR Øò4óó ð4ð
 Øò(óó ñ(r7ræcóî—eZdZUdZded<ded<    d    dd„Zed„«Zedd    „«Z    edd
„«Z
ddd „Z ed „«Z edd „«Z edd„«Zedd„«Zedd„«Zedd„«Zedd„«Zy)Ú
BinGrouperaå
    This is an internal Grouper class
 
    Parameters
    ----------
    bins : the split index of binlabels to group the item of axis
    binlabels : the label list
    indexer : np.ndarray[np.intp], optional
        the indexer created by Grouper
        some groupers (TimeGrouper) will sort its axis and its
        group_info is also sorted, so need the indexer to reorder
 
    Examples
    --------
    bins: [2, 4, 6, 8, 10]
    binlabels: DatetimeIndex(['2005-01-01', '2005-01-03',
        '2005-01-05', '2005-01-07', '2005-01-09'],
        dtype='datetime64[ns]', freq='2D')
 
    the group_info, which contains the label of each item in grouped
    axis, the index of label in label list, group number, is
 
    (array([0, 0, 1, 1, 2, 2, 3, 3, 4, 4]), array([0, 1, 2, 3, 4]), 5)
 
    means that, the grouped axis has 10 items, can be grouped into 5
    labels, the first and second items belong to the first label, the
    third and forth items belong to the second label, and so on
 
    znpt.NDArray[np.int64]ÚbinsrÚ    binlabelsNcó¬—t|«|_t|«|_||_t |j«t |j«k(sJ‚yrJ)rrvr!rwÚindexerr=)rOrvrwrys    r5rPzBinGrouper.__init__äsD€ô ! Ó&ˆŒ    Ü% iÓ0ˆŒØˆŒ ô4—>‘>Ó"¤c¨$¯)©)£nÒ4Ð4Ñ4r7cóˆ—t|j|j«Dcic]\}}|tur||“Œ}}}|Scc}}w)r*)rrwrvr    )rOrdÚvaluerÄs    r5r+zBinGrouper.groupsòsK€ô" $§.¡.°$·)±)Ó<÷
ᐐUØœ#‰~𠐉Jð
ˆñ
ð
ˆ ùó 
s¤>có—y)Nr:r¹rïs r5rûzBinGrouper.nkeysþs€ðr7cóŠ—|j\}}}|j&tj||jf«}||}|SrJ)r    ryr/Úlexsort)rOrÏr Úsorters    r5r<zBinGrouper.codes_infosB€ð—O‘O‰    ˆˆQØ <‰<Ð #Ü—Z‘Z  d§l¡lР3Ó4ˆFؐf‘+ˆC؈
r7c#ó ‡K—|dk(rˆfd„}nˆfd„}t‰j|«}d}t|j|j«D]\}}|t
ur ||||«f–—|}Œ||kr|jd||d«f–—yy­w)rýrcó"•—‰j||SrJ©r_©ÚstartÚedgers  €r5ú<lambda>z)BinGrouper.get_iterator.<locals>.<lambda>sø€¨¯©°5¸Ð)>€r7có.•—‰jdd…||…fSrJr‚rƒs  €r5r†z)BinGrouper.get_iterator.<locals>.<lambda>sø€¨¯©²1°e¸D°j°=Ñ)A€r7rÍN)r=r]rrvrwr    )rOrrËÚslicerÚlengthr„r…Úlabels `      r5rzBinGrouper.get_iterator s›øèø€ð 1Š9Û>‰FãAˆFäT—Y‘Y˜t‘_Ó%ˆàˆÜ˜tŸy™y¨$¯.©.Ó9ò    ‰KˆD%ØœCÑØ™V E¨4Ó0Ð0Ò0؉Eð    ð
6Š>Ø—.‘. Ñ$¡f¨U°DÓ&9Ð9Ó 9ð ùsƒB Bcóܗtjt«}d}t|j|j
«D]-\}}||ksŒ |t urtt||««||<|}Œ/|Sr3)Ú collectionsÚ defaultdictrèrrwrvr    Úrange)rOrør‰rŠÚbins     r5røzBinGrouper.indices%sh€ä×)Ñ)¬$Ó/ˆà ˆÜ˜dŸn™n¨d¯i©iÓ8ò    ‰JˆE3ؐ3‹wؤÑ#Ü%)¬%°°3«-Ó%8G˜E‘Nؑ𠠠     ð
ˆr7cóö—|j}tj|tj¬«}tjtj
d|j f«}t|«}|t|j «k(r*tjtj|«|«}n<tjtj
dtj|«f|«}t|«||fS)Nr´rrÍ)
rr/r>r—ÚdiffÚr_rvrr=Úrepeat)rOrr9Úrepr§s     r5r    zBinGrouper.group_info1s²€à—,‘,ˆÜŸ    ™     '´·±Ô9ˆ ܏g‰g”b—e‘e˜A˜tŸy™y˜LÑ)Ó*ˆä! #Ó&ˆØ ”c˜$Ÿ)™)“nÒ $Ü—y‘y¤§¡¨7Ó!3°SÓ9‰Hä—y‘y¤§¡ r¬2¯9©9°WÓ+=Ð'=Ñ!>ÀÓDˆHô   Ó )Ø Ø ð
ð    
r7có”—tjdtj|jdd|jddk7«dzfgS)Nrr:rÍ)r/r’Ú flatnonzerorvrïs r5rBzBinGrouper.reconstructed_codesCsB€ô—‘aœŸ™¨¯    ©    °!°"¨ ¸¿¹À3ÀB¸Ñ(GÓHÈ1ÑLÐLÑMÐNÐNr7có˜—t|j«dk7r't|jd«r|jddS|jS)Nrr:)r=rwrrïs r5rzBinGrouper.result_indexHs>€ä ˆt~‰~Ó  !Ò #¬¨T¯^©^¸AÑ->Ô(?Ø—>‘> ! "Ð%Ð %à~‰~Ðr7có—|jgSrJ)rwrïs r5rzBinGrouper.levelsOs€à—‘ÐÐr7có0—|jjgSrJ)rwrVrïs r5r$zBinGrouper.namesSs€à—‘×#Ñ#Ð$Ð$r7có¨—|j}|jd}|j|«}tj||dd|j
¬«}|gS)NrF)Úin_axisÚlevelÚuniques)rwr    rrÚGroupingr9)rOÚlevrr·rós     r5rìzBinGrouper.groupingsWsN€àn‰nˆØ—‘ Ñ"ˆØ—‘˜%“ˆÜ×ÑØ F E°¸s¿{¹{ô
ˆðˆvˆ r7rJ©rÓrÔrjrmrk)rr,rËr rq)rÓzlist[np.ndarray]rrrorpri)rÙrÚrÛrÜrârPrr+rsrûr<rrør    rBrrr$rìr¹r7r5ruruÂsø…ñð<  ÓØÓð ð     5ð
 
ó 5ðñ    óð    ðòóððòóðô:ð2ñ    óð    ðò
óð
ð"òOóðOðòóðð ò óð ðò%óð%ðòóñr7rucóæ—t|t«r0t|«dkDry|j|j    ||«St|t
«r!|j|j    ||«Sy)Nr:F)r.r"r=r]Úequalsr)r3r]rËs   r5r^r^bsa€Ü#”vÔÜ ˆt‹9qŠ=ØØx‰x˜‰~×$Ñ$ T¨$¡ZÓ0Ð0Ü    CœÔ    #؏x‰x˜‰~×$Ñ$ T¨$¡ZÓ0Ð0à r7cóV—eZdZddœ                                                    dd„Zd    d„Zed
d„«Zd d„Zy) rlrrþcó˜—||_t|«|_||_||_||_||_t|t«sJ|«‚yrJ)    rrr·rÚ_slabelsr rËr.r×)rOrr·rrrrËs       r5rPzDataSplitter.__init__rsH€ðˆŒ    Ü)¨&Ó1ˆŒ ؈Œ à"ˆŒ Ø!ˆŒàˆŒ    Ü˜$¤Ô$Ð* dÓ*Ñ$r7c#óK—|j}|jdk(rytj|j|j«\}}t ||«D]#\}}|j |t||««–—Œ%y­wr3)Ú _sorted_datarr
Úgenerate_slicesr¥rÚ_chopÚslice)rOÚsdataÚstartsÚendsr„Úends      r5rùzDataSplitter.__iter__†srèø€Ø×!Ñ!ˆà <‰<˜1Ò ð ä×*Ñ*¨4¯=©=¸$¿,¹,ÓG‰ ˆä˜f dÓ+ò    7‰JˆE3Ø—*‘*˜U¤E¨%°Ó$5Ó6Ó 6ñ    7ùs‚A=A?cód—|jj|j|j¬«S)Nrþ)rrr rËrïs r5r§zDataSplitter._sorted_data“s!€ày‰y~‰~˜dŸn™n°4·9±9ˆ~Ó=Ð=r7có—t|«‚rJr)rOr«Ú    slice_objs   r5r©zDataSplitter._chop—s €Ü! $Ó'Ð'r7N)rr r·rnrr×rrnrrnrËr rÓrÔ)rÓr*)rÓr )r±rªrÓr,)rÙrÚrÛrPrùrr§r©r¹r7r5rlrlqsn„ðñ+àð+ð%ð+ðð    +ð 'ð +ð)ð+ðð+ð
ó+ó( 7ðò>óð>ô(r7rlcó—eZdZdd„Zy)ÚSeriesSplittercóº—|jj|«}|j||j¬«}|j|_|j |d¬«S)N©r]r/©Úmethod)Ú_mgrÚ    get_sliceÚ_constructor_from_mgrr]rVÚ_nameÚ __finalize__)rOr«r±ÚmgrÚsers     r5r©zSeriesSplitter._chopœsP€àj‰j×"Ñ" 9Ó-ˆØ×)Ñ)¨#°C·H±HÐ)Ó=ˆØ—J‘JˆŒ    Ø×Ñ ¨iÐÓ8Ð8r7N)r«r"r±rªrÓr"©rÙrÚrÛr©r¹r7r5r³r³›s„ô9r7r³có—eZdZdd„Zy)Ú FrameSplittercó¶—|jj|d|jz
¬«}|j||j¬«}|j |d¬«S)Nr:rþrµr/r¶)r¸r¹rËrºr]r¼)rOr«r±r½Údfs     r5r©zFrameSplitter._chop¥sQ€ð j‰j×"Ñ" 9°1°t·y±y±=Ð"ÓAˆØ × (Ñ (¨°3·8±8Ð (Ó <ˆØ‰˜u¨YˆÓ7Ð7r7N)r«rr±rªrÓrr¿r¹r7r5rÁrÁ¤s„ô8r7rÁrþcóX—t|t«rt}nt}|||||||¬«S)N)rrrË)r.r"r³rÁ)rr·rrrrËÚklasss       r5rÿrÿ°s4€ô$œÔÜ$2‰ôˆá Ø ˆfg¨¸ZÈdô ðr7r )rËr rÓrŸ)rr,r·rnrr×rrnrrnrËr rÓrl)LrÜÚ
__future__rrŒrÞÚtypingrrrrrÚnumpyr/Ú pandas._libsr    r
Úpandas._libs.groupbyÚ_libsr/rÚpandas._typingr r r rrÚ pandas.errorsrÚpandas.util._decoratorsrÚpandas.core.dtypes.castrrÚpandas.core.dtypes.commonrrrrrÚpandas.core.dtypes.missingrrÚpandas.core.framerÚpandas.core.groupbyrÚpandas.core.indexes.apirrr r!Úpandas.core.seriesr"Úpandas.core.sortingr#r$r%r&r'r(Úcollections.abcr)r*r+Úpandas.core.genericr,r6r?rArærur^rlr³rÁrÿr¹r7r5ú<module>rÙs:ðñõ#ãÛ÷õó÷÷*Ð)÷õõ.Ý2÷÷õ÷õ
(Ý'÷óõ &÷÷ñ÷ñõ ,ó>ò ÷L
ñL
÷^F(ñF(ôR ]ô]ó@ô'(7˜8Ñ$ô'(ôT9\ô9ô    8Lô    8ð&ñØ
ðà  ðððð
#ð ð %ð ð ððôr7