def pivot( data: DataFrame, index: IndexLabel | None = None, columns: IndexLabel | None = None, values: IndexLabel | None = None, ) -> DataFrame: if columns is None: raise TypeError("pivot() missing 1 required argument: 'columns'") columns_listlike = com.convert_to_list_like(columns) indexed: DataFrame | Series if values is None: if index is not None: cols = com.convert_to_list_like(index) else: cols = [] append = index is None # error: Unsupported operand types for + ("List[Any]" and "ExtensionArray") # error: Unsupported left operand type for + ("ExtensionArray") indexed = data.set_index( cols + columns_listlike, append=append # type: ignore[operator] ) else: if index is None: if isinstance(data.index, MultiIndex): # GH 23955 index_list = [ data.index.get_level_values(i) for i in range(data.index.nlevels) ] else: index_list = [Series(data.index, name=data.index.name)] else: index_list = [data[idx] for idx in com.convert_to_list_like(index)] data_columns = [data[col] for col in columns_listlike] index_list.extend(data_columns) multiindex = MultiIndex.from_arrays(index_list) if is_list_like(values) and not isinstance(values, tuple): # Exclude tuple because it is seen as a single column name values = cast(Sequence[Hashable], values) indexed = data._constructor(data[values]._values, index=multiindex, columns=values) else: indexed = data._constructor_sliced(data[values]._values, index=multiindex) # error: Argument 1 to "unstack" of "DataFrame" has incompatible type "Union # [List[Any], ExtensionArray, ndarray[Any, Any], Index, Series]"; expected # "Hashable" return indexed.unstack(columns_listlike) # type: ignore[arg-type]
def pivot( data: DataFrame, index: IndexLabel | None = None, columns: IndexLabel | None = None, values: IndexLabel | None = None, ) -> DataFrame: if columns is None: raise TypeError("pivot() missing 1 required argument: 'columns'") columns = com.convert_to_list_like(columns) if values is None: if index is not None: cols = com.convert_to_list_like(index) else: cols = [] append = index is None # error: Unsupported operand types for + ("List[Any]" and "ExtensionArray") # error: Unsupported left operand type for + ("ExtensionArray") indexed = data.set_index( cols + columns, append=append # type: ignore[operator] ) else: if index is None: index = [Series(data.index, name=data.index.name)] else: index = com.convert_to_list_like(index) index = [data[idx] for idx in index] data_columns = [data[col] for col in columns] index.extend(data_columns) index = MultiIndex.from_arrays(index) if is_list_like(values) and not isinstance(values, tuple): # Exclude tuple because it is seen as a single column name values = cast(Sequence[Hashable], values) indexed = data._constructor(data[values]._values, index=index, columns=values) else: indexed = data._constructor_sliced(data[values]._values, index=index) return indexed.unstack(columns)
def pivot( data: "DataFrame", index: Optional[Union[Label, Sequence[Label]]] = None, columns: Optional[Union[Label, Sequence[Label]]] = None, values: Optional[Union[Label, Sequence[Label]]] = None, ) -> "DataFrame": if columns is None: raise TypeError("pivot() missing 1 required argument: 'columns'") columns = com.convert_to_list_like(columns) if values is None: if index is not None: cols = com.convert_to_list_like(index) else: cols = [] cols.extend(columns) append = index is None indexed = data.set_index(cols, append=append) else: if index is None: index = [Series(data.index, name=data.index.name)] else: index = com.convert_to_list_like(index) index = [data[idx] for idx in index] data_columns = [data[col] for col in columns] index.extend(data_columns) index = MultiIndex.from_arrays(index) if is_list_like(values) and not isinstance(values, tuple): # Exclude tuple because it is seen as a single column name values = cast(Sequence[Label], values) indexed = data._constructor(data[values]._values, index=index, columns=values) else: indexed = data._constructor_sliced(data[values]._values, index=index) return indexed.unstack(columns)
def boxplot_frame_groupby( grouped, subplots=True, column=None, fontsize=None, rot=0, grid=True, ax=None, figsize=None, layout=None, sharex=False, sharey=True, **kwds, ): if subplots is True: naxes = len(grouped) fig, axes = create_subplots( naxes=naxes, squeeze=False, ax=ax, sharex=sharex, sharey=sharey, figsize=figsize, layout=layout, ) axes = flatten_axes(axes) ret = pd.Series(dtype=object) for (key, group), ax in zip(grouped, axes): d = group.boxplot( ax=ax, column=column, fontsize=fontsize, rot=rot, grid=grid, **kwds ) ax.set_title(pprint_thing(key)) ret.loc[key] = d maybe_adjust_figure(fig, bottom=0.15, top=0.9, left=0.1, right=0.9, wspace=0.2) else: keys, frames = zip(*grouped) if grouped.axis == 0: df = pd.concat(frames, keys=keys, axis=1) else: if len(frames) > 1: df = frames[0].join(frames[1::]) else: df = frames[0] # GH 16748, DataFrameGroupby fails when subplots=False and `column` argument # is assigned, and in this case, since `df` here becomes MI after groupby, # so we need to couple the keys (grouped values) and column (original df # column) together to search for subset to plot if column is not None: column = com.convert_to_list_like(column) multi_key = pd.MultiIndex.from_product([keys, column]) column = list(multi_key.values) ret = df.boxplot( column=column, fontsize=fontsize, rot=rot, grid=grid, ax=ax, figsize=figsize, layout=layout, **kwds, ) return ret