Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.12/site-packages/pandas/core/reshape/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.12/site-packages/pandas/core/reshape/__pycache__/melt.cpython-312.pyc

�

Mٜg�C��J�ddlmZddlZddlmZddlZddlmZddl	m
Z
ddlmZddl
mZddlmcmZddlmZdd	lmZdd
lmZddlmZddlmZerdd
lmZddlm Z ddl!m"Z"dd�Z#eedddd�z�						d							dd��Z$ddd�Z%	d							dd�Z&y)�)�annotationsN)�
TYPE_CHECKING)�Appender)�is_list_like)�
concat_compat)�notna)�
MultiIndex)�concat)�tile_compat)�_shared_docs)�
to_numeric)�Hashable)�AnyArrayLike)�	DataFramec��|�Gt|�s|gSt|t�rt|t�st	|�d���t|�SgS)Nz7 must be a list of tuples when columns are a MultiIndex)r�
isinstancer	�list�
ValueError)�arg_vars�variable�columnss   �C/usr/local/lib/python3.12/site-packages/pandas/core/reshape/melt.py�ensure_list_varsrsT�����H�%��:��
���
,�Z��$�5O���*�S�T��
���>�!��	��meltzpd.melt(df, zDataFrame.melt)�caller�otherc�\�||jvrtd|�d���t|d|j�}|du}t|d|j�}|s|r�|�|jj|�}n|j}||z}	|j	|	�}
|
dk(}|j�r/t
|	|�D��
cgc]
\}}
|
s�	|��}}}
td|����|r'|jdd�tj|
�f}n!|j�}n|j�}|� |jj|�|_|��t|jt�r�t|jj�tt!|jj��k(r|jj}n�t#t|jj��D�cgc]}d|����	}}nM|jj$�|jj$ndg}nt'|�rtd	|�d
���|g}|j(\}}|t|�z
}i}|D]�}|j+|�}t|j,t.j,�sF|dkDrt1|g|zd�
�||<�Rt3|�g|j$|j,��||<�~t/j4|j6|�||<��||z|gz}|j(ddkDrjtd�|j8D��sNt1t#|j(d�D�cgc]}|jdd�|f��c}�j:||<n|j6j=d�||<t?|�D]2\}}|jjA|�jC|�||<�4|jE||��}|stG|jH|�|_$|Scc}
}wcc}wcc}w)Nzvalue_name (z3) cannot match an element in the DataFrame columns.�id_vars�
value_vars���zFThe following id_vars or value_vars are not present in the DataFrame: �	variable_rz	var_name=z must be a scalar.rT)�ignore_index)�name�dtype�c3�nK�|]-}t|tj�xr|j���/y�w)N)r�npr%�_supports_2d)�.0�dts  r�	<genexpr>zmelt.<locals>.<genexpr>zs.����&�CO�R�J�r�2�8�8�$�$�8����8�<�s�35�F�r)%rrr�get_level_values�get_indexer_for�any�zip�KeyError�iloc�algos�unique�copyrr	�len�names�set�ranger$r�shape�popr%r(r
�type�tile�_values�dtypes�values�ravel�	enumerate�_get_level_values�repeat�_constructorr�index)�framerr �var_name�
value_name�	col_levelr#�value_vars_was_not_none�level�labels�idx�missing�lab�	not_found�missing_labels�i�num_rows�K�num_cols_adjusted�mdata�col�id_data�mcolumns�results                        rrr+s����U�]�]�"���:�,�'%�
%�
�	
��w�	�5�=�=�A�G�(��4��!�*�l�E�M�M�J�J��*�� ��M�M�2�2�9�=�E��M�M�E��:�%���#�#�F�+����)���;�;�=�*-�f�g�*>��*>���Y�)��*>�
���"�"0�!1�3��
�#��J�J�q�%�,�,�s�"3�3�4�E��J�J�L�E��
�
������
�
�6�6�y�A��
����e�m�m�Z�0��5�=�=�&�&�'�3�s�5�=�=�3F�3F�/G�+H�H� �=�=�.�.��5:�3�u�}�}�?R�?R�;S�5T�U�5T��i��s�O�5T��U�',�m�m�&8�&8�&D��
�
�"�"�*��H�
�h�	��I�H�;�&8�9�:�:��:���+�+�K�H�a��C��L�(��*,�E����)�)�C�.���'�-�-����2� �1�$�#�W�I�0A�$A�PT�U��c�
�+�T�'�]�2�G�L�L��
�
�V��c�
�������2C�D�E�#�J����!�Z�L�0�H��{�{�1�~���#�&�CH�<�<�&�#�#�',�U�[�[��^�'<�=�'<�!�U�Z�Z��1��
�'<�=�
�
�&�	�j��"�M�M�/�/��4��j���H�%���3��]�]�4�4�Q�7�>�>�x�H��c�
�&��
�
��x�
�
8�F��"�5�;�;�0A�B����M��G��.V��@
>s�8
P�P�)P$�P)c�F�i}g}t�}ttt|j	����}|j�D]j\}}t|�|k7rt
d��|D�	cgc]}	||	j��}
}	t|
�||<|j|�|j|�}�lt|jj|��}|D](}	tj||	j|�||	<�*|rxtj t||d�t"��}|D]}
|t%||
�z}�|j'�s&|j�D��cic]\}}|||��
}}}|j)|||z��Scc}	wcc}}w)a�
    Reshape wide-format data to long. Generalized inverse of DataFrame.pivot.

    Accepts a dictionary, ``groups``, in which each key is a new column name
    and each value is a list of old column names that will be "melted" under
    the new column name as part of the reshape.

    Parameters
    ----------
    data : DataFrame
        The wide-format DataFrame.
    groups : dict
        {new_name : list_of_columns}.
    dropna : bool, default True
        Do not include columns whose entries are all NaN.

    Returns
    -------
    DataFrame
        Reshaped DataFrame.

    See Also
    --------
    melt : Unpivot a DataFrame from wide to long format, optionally leaving
        identifiers set.
    pivot : Create a spreadsheet-style pivot table as a DataFrame.
    DataFrame.pivot : Pivot without aggregation that can handle
        non-numeric data.
    DataFrame.pivot_table : Generalization of pivot that can handle
        duplicate values for one index/column pair.
    DataFrame.unstack : Pivot based on the index values instead of a
        column.
    wide_to_long : Wide panel to long format. Less flexible but more
        user-friendly than melt.

    Examples
    --------
    >>> data = pd.DataFrame({'hr1': [514, 573], 'hr2': [545, 526],
    ...                      'team': ['Red Sox', 'Yankees'],
    ...                      'year1': [2007, 2007], 'year2': [2008, 2008]})
    >>> data
       hr1  hr2     team  year1  year2
    0  514  545  Red Sox   2007   2008
    1  573  526  Yankees   2007   2008

    >>> pd.lreshape(data, {'year': ['year1', 'year2'], 'hr': ['hr1', 'hr2']})
          team  year   hr
    0  Red Sox  2007  514
    1  Yankees  2007  573
    2  Red Sox  2008  545
    3  Yankees  2008  526
    z$All column lists must be same lengthr)r%r.)r:r8�next�iterrB�itemsrr@r�append�unionrr�
differencer(r?�ones�boolr�allrG)�data�groups�dropnarY�
pivot_cols�all_colsrW�targetr9rZ�	to_concat�id_cols�mask�c�k�vs                r�lreshapert�sy��j
�E��J�!�e�H��D��f�m�m�o�&�'�(�A�����
����u�:��?��C�D�D�27�8�%�3�T�#�Y�&�&�%�	�8�%�i�0��f�
����&�!��>�>�%�(��(��4�<�<�*�*�8�4�5�G����W�W�T�#�Y�.�.��2��c�
����w�w�s�5��A��/�0��=���A��E�%��(�O�#�D���x�x�z�,1�K�K�M�:�M�D�A�q�Q��$��Z�M�E�:����U�G�j�,@��A�A��#9��;s�-F�/Fc���dd�}d	d�}t|�s|g}nt|�}|jj|�j	�rtd��t|�s|g}nt|�}||j
�j	�rtd��g}g}	|D]:}
|||
||�}|	j|�|j|||
||||���<t|d��}|jj|	�}
||
}t|�dk(r |j|�j|�S|j|j�|��j||gz�S)
ax 
    Unpivot a DataFrame from wide to long format.

    Less flexible but more user-friendly than melt.

    With stubnames ['A', 'B'], this function expects to find one or more
    group of columns with format
    A-suffix1, A-suffix2,..., B-suffix1, B-suffix2,...
    You specify what you want to call this suffix in the resulting long format
    with `j` (for example `j='year'`)

    Each row of these wide variables are assumed to be uniquely identified by
    `i` (can be a single column name or a list of column names)

    All remaining variables in the data frame are left intact.

    Parameters
    ----------
    df : DataFrame
        The wide-format DataFrame.
    stubnames : str or list-like
        The stub name(s). The wide format variables are assumed to
        start with the stub names.
    i : str or list-like
        Column(s) to use as id variable(s).
    j : str
        The name of the sub-observation variable. What you wish to name your
        suffix in the long format.
    sep : str, default ""
        A character indicating the separation of the variable names
        in the wide format, to be stripped from the names in the long format.
        For example, if your column names are A-suffix1, A-suffix2, you
        can strip the hyphen by specifying `sep='-'`.
    suffix : str, default '\\d+'
        A regular expression capturing the wanted suffixes. '\\d+' captures
        numeric suffixes. Suffixes with no numbers could be specified with the
        negated character class '\\D+'. You can also further disambiguate
        suffixes, for example, if your wide variables are of the form A-one,
        B-two,.., and you have an unrelated column A-rating, you can ignore the
        last one by specifying `suffix='(!?one|two)'`. When all suffixes are
        numeric, they are cast to int64/float64.

    Returns
    -------
    DataFrame
        A DataFrame that contains each stub name as a variable, with new index
        (i, j).

    See Also
    --------
    melt : Unpivot a DataFrame from wide to long format, optionally leaving
        identifiers set.
    pivot : Create a spreadsheet-style pivot table as a DataFrame.
    DataFrame.pivot : Pivot without aggregation that can handle
        non-numeric data.
    DataFrame.pivot_table : Generalization of pivot that can handle
        duplicate values for one index/column pair.
    DataFrame.unstack : Pivot based on the index values instead of a
        column.

    Notes
    -----
    All extra variables are left untouched. This simply uses
    `pandas.melt` under the hood, but is hard-coded to "do the right thing"
    in a typical case.

    Examples
    --------
    >>> np.random.seed(123)
    >>> df = pd.DataFrame({"A1970" : {0 : "a", 1 : "b", 2 : "c"},
    ...                    "A1980" : {0 : "d", 1 : "e", 2 : "f"},
    ...                    "B1970" : {0 : 2.5, 1 : 1.2, 2 : .7},
    ...                    "B1980" : {0 : 3.2, 1 : 1.3, 2 : .1},
    ...                    "X"     : dict(zip(range(3), np.random.randn(3)))
    ...                   })
    >>> df["id"] = df.index
    >>> df
      A1970 A1980  B1970  B1980         X  id
    0     a     d    2.5    3.2 -1.085631   0
    1     b     e    1.2    1.3  0.997345   1
    2     c     f    0.7    0.1  0.282978   2
    >>> pd.wide_to_long(df, ["A", "B"], i="id", j="year")
    ... # doctest: +NORMALIZE_WHITESPACE
                    X  A    B
    id year
    0  1970 -1.085631  a  2.5
    1  1970  0.997345  b  1.2
    2  1970  0.282978  c  0.7
    0  1980 -1.085631  d  3.2
    1  1980  0.997345  e  1.3
    2  1980  0.282978  f  0.1

    With multiple id columns

    >>> df = pd.DataFrame({
    ...     'famid': [1, 1, 1, 2, 2, 2, 3, 3, 3],
    ...     'birth': [1, 2, 3, 1, 2, 3, 1, 2, 3],
    ...     'ht1': [2.8, 2.9, 2.2, 2, 1.8, 1.9, 2.2, 2.3, 2.1],
    ...     'ht2': [3.4, 3.8, 2.9, 3.2, 2.8, 2.4, 3.3, 3.4, 2.9]
    ... })
    >>> df
       famid  birth  ht1  ht2
    0      1      1  2.8  3.4
    1      1      2  2.9  3.8
    2      1      3  2.2  2.9
    3      2      1  2.0  3.2
    4      2      2  1.8  2.8
    5      2      3  1.9  2.4
    6      3      1  2.2  3.3
    7      3      2  2.3  3.4
    8      3      3  2.1  2.9
    >>> l = pd.wide_to_long(df, stubnames='ht', i=['famid', 'birth'], j='age')
    >>> l
    ... # doctest: +NORMALIZE_WHITESPACE
                      ht
    famid birth age
    1     1     1    2.8
                2    3.4
          2     1    2.9
                2    3.8
          3     1    2.2
                2    2.9
    2     1     1    2.0
                2    3.2
          2     1    1.8
                2    2.8
          3     1    1.9
                2    2.4
    3     1     1    2.2
                2    3.3
          2     1    2.3
                2    3.4
          3     1    2.1
                2    2.9

    Going from long back to wide just takes some creative use of `unstack`

    >>> w = l.unstack()
    >>> w.columns = w.columns.map('{0[0]}{0[1]}'.format)
    >>> w.reset_index()
       famid  birth  ht1  ht2
    0      1      1  2.8  3.4
    1      1      2  2.9  3.8
    2      1      3  2.2  2.9
    3      2      1  2.0  3.2
    4      2      2  1.8  2.8
    5      2      3  1.9  2.4
    6      3      1  2.2  3.3
    7      3      2  2.3  3.4
    8      3      3  2.1  2.9

    Less wieldy column names are also handled

    >>> np.random.seed(0)
    >>> df = pd.DataFrame({'A(weekly)-2010': np.random.rand(3),
    ...                    'A(weekly)-2011': np.random.rand(3),
    ...                    'B(weekly)-2010': np.random.rand(3),
    ...                    'B(weekly)-2011': np.random.rand(3),
    ...                    'X' : np.random.randint(3, size=3)})
    >>> df['id'] = df.index
    >>> df # doctest: +NORMALIZE_WHITESPACE, +ELLIPSIS
       A(weekly)-2010  A(weekly)-2011  B(weekly)-2010  B(weekly)-2011  X  id
    0        0.548814        0.544883        0.437587        0.383442  0   0
    1        0.715189        0.423655        0.891773        0.791725  1   1
    2        0.602763        0.645894        0.963663        0.528895  1   2

    >>> pd.wide_to_long(df, ['A(weekly)', 'B(weekly)'], i='id',
    ...                 j='year', sep='-')
    ... # doctest: +NORMALIZE_WHITESPACE
             X  A(weekly)  B(weekly)
    id year
    0  2010  0   0.548814   0.437587
    1  2010  1   0.715189   0.891773
    2  2010  1   0.602763   0.963663
    0  2011  0   0.544883   0.383442
    1  2011  1   0.423655   0.791725
    2  2011  1   0.645894   0.528895

    If we have many columns, we could also use a regex to find our
    stubnames and pass that list on to wide_to_long

    >>> stubnames = sorted(
    ...     set([match[0] for match in df.columns.str.findall(
    ...         r'[A-B]\(.*\)').values if match != []])
    ... )
    >>> list(stubnames)
    ['A(weekly)', 'B(weekly)']

    All of the above examples have integers as suffixes. It is possible to
    have non-integers as suffixes.

    >>> df = pd.DataFrame({
    ...     'famid': [1, 1, 1, 2, 2, 2, 3, 3, 3],
    ...     'birth': [1, 2, 3, 1, 2, 3, 1, 2, 3],
    ...     'ht_one': [2.8, 2.9, 2.2, 2, 1.8, 1.9, 2.2, 2.3, 2.1],
    ...     'ht_two': [3.4, 3.8, 2.9, 3.2, 2.8, 2.4, 3.3, 3.4, 2.9]
    ... })
    >>> df
       famid  birth  ht_one  ht_two
    0      1      1     2.8     3.4
    1      1      2     2.9     3.8
    2      1      3     2.2     2.9
    3      2      1     2.0     3.2
    4      2      2     1.8     2.8
    5      2      3     1.9     2.4
    6      3      1     2.2     3.3
    7      3      2     2.3     3.4
    8      3      3     2.1     2.9

    >>> l = pd.wide_to_long(df, stubnames='ht', i=['famid', 'birth'], j='age',
    ...                     sep='_', suffix=r'\w+')
    >>> l
    ... # doctest: +NORMALIZE_WHITESPACE
                      ht
    famid birth age
    1     1     one  2.8
                two  3.4
          2     one  2.9
                two  3.8
          3     one  2.2
                two  2.9
    2     1     one  2.0
                two  3.2
          2     one  1.8
                two  2.8
          3     one  1.9
                two  2.4
    3     1     one  2.2
                two  3.3
          2     one  2.3
                two  3.4
          3     one  2.1
                two  2.9
    c���dtj|��tj|��|�d�}|j|jjj	|�S)N�^�$)�re�escaper�str�match)�df�stub�sep�suffix�regexs     r�
get_var_namesz#wide_to_long.<locals>.get_var_names�sL���R�Y�Y�t�_�%�b�i�i��n�%5�f�X�Q�?���z�z�"�*�*�.�.�.�.�u�5�6�6rc�6�t||||j|�|��}||jjt	j
||z�dd��||<	t
||�||<|j||gz�S#tttf$rY�+wxYw)N)rr rKrJ�T)r�)r�rstripr{�replaceryrzr
�	TypeErrorr�
OverflowError�	set_index)r}r~rU�jr r�newdfs       r�	melt_stubzwide_to_long.<locals>.melt_stub�s������!��{�{�3�'��
����8�<�<�'�'��	�	�$��*�(=�r��'�N��a��	�!�%��(�+�E�!�H�
���q�A�3�w�'�'��	�:�}�5�	��	�s�B�B�Bz,stubname can't be identical to a column namez3the id variables need to uniquely identify each rowr&)�axis)�on)r~r{rr{r�r{)r~r{rr{)rrr�isinr1r�
duplicated�extendrbr
rdr8r��join�merge�reset_index)r}�	stubnamesrUr�rr�r�r��_melted�value_vars_flattenedr~�	value_var�meltedr�news               r�wide_to_longr��sT��\7�(�&�	�"��K�	���O�	�	�z�z���y�!�%�%�'��G�H�H���?�
�C����G��	�!�u��������N�O�O��G�����!�"�d�C��8�	��#�#�I�.����y��T�1�a��C�@�A��
�G�!�
$�F��j�j�#�#�$8�9�G�
�W�+�C�
�1�v��{��}�}�Q��$�$�V�,�,��y�y��+�+�-�!�y�4�>�>�q�A�3�w�G�Gr)rr{�returnr)NNN�valueNT)rIrrKrr#rfr�r)T)rhrri�dictrjrfr�r)r�z\d+)r}rrr{r�r{r�r)'�
__future__rry�typingr�numpyr(�pandas.util._decoratorsr�pandas.core.dtypes.commonr�pandas.core.dtypes.concatr�pandas.core.dtypes.missingr�pandas.core.algorithms�core�
algorithmsr5�pandas.core.indexes.apir	�pandas.core.reshape.concatr
�pandas.core.reshape.utilr�pandas.core.shared_docsr�pandas.core.tools.numericr
�collections.abcr�pandas._typingr�pandasrrrrtr��rr�<module>r�s���"�	� ��,�2�3�,�&�&�.�-�0�0�0��(�+� ��
�,�v�
�N�EU�!V�
V�W�
��
�"���^��^�
�^��^��^�X�^�BMB�bBH�cH��cH�),�cH�;>�cH��cHr

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists