gL iddlmZddlmZddlZddlmZddlm Z m Z ddl m Z erddl mZddlmZdd lmZmZ d dd Z dd Zdd Zy)) annotations) TYPE_CHECKINGN)remove_na_arraylike) MultiIndexconcat)unpack_single_str_list)Hashable) IndexLabel) DataFrameSeriesc |dk(rd}nd}t|jtsJ|jj|Dcic]2}||jdd|jj ||k(f4c}Scc}w)a~ Create data for iteration given `by` is assigned or not, and it is only used in both hist and boxplot. If `by` is assigned, return a dictionary of DataFrames in which the key of dictionary is the values in groups. If `by` is not assigned, return input as is, and this preserves current status of iter_data. Parameters ---------- data : reformatted grouped data from `_compute_plot_data` method. kind : str, plot kind. This function is only used for `hist` and `box` plots. Returns ------- iter_data : DataFrame or Dictionary of DataFrames Examples -------- If `by` is assigned: >>> import numpy as np >>> tuples = [('h1', 'a'), ('h1', 'b'), ('h2', 'a'), ('h2', 'b')] >>> mi = pd.MultiIndex.from_tuples(tuples) >>> value = [[1, 3, np.nan, np.nan], ... [3, 4, np.nan, np.nan], [np.nan, np.nan, 5, 6]] >>> data = pd.DataFrame(value, columns=mi) >>> create_iter_data_given_by(data) {'h1': h1 a b 0 1.0 3.0 1 3.0 4.0 2 NaN NaN, 'h2': h2 a b 0 NaN NaN 1 NaN NaN 2 5.0 6.0} histrN) isinstancecolumnsrlevelslocget_level_values)datakindlevelcols i/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pandas/plotting/_matplotlib/groupby.pycreate_iter_data_given_byrs^ v~ dllJ // /<<&&u-   TXXa66u=DD EE  s7A<ct|}|j|}g}|D]:\}}tj|g|g}||} || _|j | <t |d}|S)al Internal function to group data, and reassign multiindex column names onto the result in order to let grouped data be used in _compute_plot_data method. Parameters ---------- data : Original DataFrame to plot by : grouped `by` parameter selected by users cols : columns of data set (excluding columns used in `by`) Returns ------- Output is the reconstructed DataFrame with MultiIndex columns. The first level of MI is unique values of groups, and second level of MI is the columns selected by users. Examples -------- >>> d = {'h': ['h1', 'h1', 'h2'], 'a': [1, 3, 5], 'b': [3, 4, 6]} >>> df = pd.DataFrame(d) >>> reconstruct_data_with_by(df, by='h', cols=['a', 'b']) h1 h2 a b a b 0 1.0 3.0 NaN NaN 1 3.0 4.0 NaN NaN 2 NaN NaN 5.0 6.0 r)axis)rgroupbyr from_productrappendr) rbycols by_modifiedgrouped data_listkeygroupr sub_groups rreconstruct_data_with_byr(Xs~<),Kll;'GI$ U))C5$-8$K # # $ )! $D Kc|Xt|jdkDr@tj|jDcgc] }t |c}jSt |Scc}w)zInternal function to reformat y given `by` is applied or not for hist plot. If by is None, input y is 1-d with NaN removed; and if by is not None, groupby will take place and input y is multi-dimensional array. r)lenshapenparrayTr)yr rs rreformat_hist_y_given_byr1sS  ~#agg,*xxQSSAc,S1ABDDD q !!BsA&)r)rr rstrreturnz"dict[Hashable, DataFrame | Series])rr r r r!r r3r )r0 np.ndarrayr zIndexLabel | Noner3r4) __future__rtypingrnumpyr-pandas.core.dtypes.missingrpandasrr pandas.plotting._matplotlib.miscrcollections.abcr pandas._typingr r r rr(r1r)rr>sx" : D()"(: ::':z+ +#++5++\"r)