- API reference
- DataFrame
- pandas.DataF...
pandas.DataFrame.pivot#
- DataFrame.pivot(*,columns,index=<no_default>,values=<no_default>)[source]#
Return reshaped DataFrame organized by given index / column values.
Reshape data (produce a “pivot” table) based on column values. Usesunique values from specifiedindex /columns to form axes of theresulting DataFrame. This function does not support dataaggregation, multiple values will result in a MultiIndex in thecolumns. See theUser Guide for more on reshaping.
- Parameters:
- columnsstr or object or a list of str
Column to use to make new frame’s columns.
- indexstr or object or a list of str, optional
Column to use to make new frame’s index. If not given, uses existing index.
- valuesstr, object or a list of the previous, optional
Column(s) to use for populating new frame’s values. If notspecified, all remaining columns will be used and the result willhave hierarchically indexed columns.
- Returns:
- DataFrame
Returns reshaped DataFrame.
- Raises:
- ValueError:
When there are anyindex,columns combinations with multiplevalues.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.
wide_to_long
Wide panel to long format. Less flexible but more user-friendly than melt.
Notes
For finer-tuned control, see hierarchical indexing documentation alongwith the related stack/unstack methods.
Referencethe user guide for more examples.
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 zoo0 one A 1 x1 one B 2 y2 one C 3 z3 two A 4 q4 two B 5 w5 two C 6 t
>>>df.pivot(index='foo',columns='bar',values='baz')bar A B Cfooone 1 2 3two 4 5 6
>>>df.pivot(index='foo',columns='bar')['baz']bar A B Cfooone 1 2 3two 4 5 6
>>>df.pivot(index='foo',columns='bar',values=['baz','zoo']) baz zoobar A B C A B Cfooone 1 2 3 x y ztwo 4 5 6 q w t
You could also assign a list of column names or a list of index names.
>>>df=pd.DataFrame({..."lev1":[1,1,1,2,2,2],..."lev2":[1,1,2,1,1,2],..."lev3":[1,2,1,2,1,2],..."lev4":[1,2,3,4,5,6],..."values":[0,1,2,3,4,5]})>>>df lev1 lev2 lev3 lev4 values0 1 1 1 1 01 1 1 2 2 12 1 2 1 3 23 2 1 2 4 34 2 1 1 5 45 2 2 2 6 5
>>>df.pivot(index="lev1",columns=["lev2","lev3"],values="values")lev2 1 2lev3 1 2 1 2lev11 0.0 1.0 2.0 NaN2 4.0 3.0 NaN 5.0
>>>df.pivot(index=["lev1","lev2"],columns=["lev3"],values="values") lev3 1 2lev1 lev2 1 1 0.0 1.0 2 2.0 NaN 2 1 4.0 3.0 2 NaN 5.0
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 baz0 one A 11 one A 22 two B 33 two C 4
Notice that the first two rows are the same for ourindexandcolumns arguments.
>>>df.pivot(index='foo',columns='bar',values='baz')Traceback (most recent call last):...ValueError:Index contains duplicate entries, cannot reshape