# pandas.pivot

`pandas.``pivot`(data, index=None, columns=None, values=None)

  Return reshaped DataFrame organized by given index / column values.

  Reshape data (produce a “pivot” table) based on column values. Uses unique values from specified index / columns to form axes of the resulting DataFrame. This function does not support data aggregation, multiple values will result in a MultiIndex in the columns. See the User Guide for more on reshaping.

  Parameters:

  data : DataFrame

  index : string or object, optional

  > Column to use to make new frame’s index. If None, uses existing index.

  columns : string or object

  > Column to use to make new frame’s columns.

  values : string, object or a list of the previous, optional

  > Column(s) to use for populating new frame’s values. If not specified, all remaining columns will be used and the result will have hierarchically indexed columns.

  > Changed in version 0.23.0: Also accept list of column names.

  Returns:

  DataFrame

  > Returns reshaped DataFrame.

  Raises:

  ValueError:

  > When there are any index, columns combinations with multiple values. DataFrame.pivot_table when you need to aggregate.

  See also

  `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

  For finer-tuned control, see hierarchical indexing documentation along with the related stack/unstack methods.

  Examples

      >>> df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two',
      ...                            'two'],
      ...                    'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
      ...                    'baz': [1, 2, 3, 4, 5, 6],
      ...                    'zoo': ['x', 'y', 'z', 'q', 'w', 't']})
      >>> df
          foo   bar  baz  zoo
      0   one   A    1    x
      1   one   B    2    y
      2   one   C    3    z
      3   two   A    4    q
      4   two   B    5    w
      5   two   C    6    t

      >>> df.pivot(index='foo', columns='bar', values='baz')
      bar  A   B   C
      foo
      one  1   2   3
      two  4   5   6

      >>> df.pivot(index='foo', columns='bar')['baz']
      bar  A   B   C
      foo
      one  1   2   3
      two  4   5   6

      >>> df.pivot(index='foo', columns='bar', values=['baz', 'zoo'])
            baz       zoo
      bar   A  B  C   A  B  C
      foo
      one   1  2  3   x  y  z
      two   4  5  6   q  w  t

  A ValueError is raised if there are any duplicates.

      >>> df = pd.DataFrame({"foo": ['one', 'one', 'two', 'two'],
      ...                    "bar": ['A', 'A', 'B', 'C'],
      ...                    "baz": [1, 2, 3, 4]})
      >>> df
         foo bar  baz
      0  one   A    1
      1  one   A    2
      2  two   B    3
      3  two   C    4

  Notice that the first two rows are the same for our index and columns arguments.

      >>> df.pivot(index='foo', columns='bar', values='baz')
      Traceback (most recent call last):
         ...
      ValueError: Index contains duplicate entries, cannot reshape

Scroll To Top