Closed
Description
I am not sure anymore if DataFrame.pivot
actually supports multiple columns to set as index
/columns
(it should), but in any case this error is very confusing:
In [1]: df = pd.DataFrame({'lev1': [1, 1, 1, 1,2, 2, 2,2], 'lev2': [1, 1, 2, 2, 1, 1, 2, 2], 'lev3': [1, 2, 1, 2, 1, 2, 1, 2], 'values': range(8)})
In [2]: df
Out[2]:
lev1 lev2 lev3 values
0 1 1 1 0
1 1 1 2 1
2 1 2 1 2
3 1 2 2 3
4 2 1 1 4
5 2 1 2 5
6 2 2 1 6
7 2 2 2 7
In [3]: df.pivot(index=['lev1', 'lev2'], columns='lev3', values='values')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-2fef29f9fd39> in <module>()
----> 1 df.pivot(index=['lev1', 'lev2'], columns='lev3', values='values')
~/scipy/pandas/pandas/core/frame.py in pivot(self, index, columns, values)
5191 """
5192 from pandas.core.reshape.reshape import pivot
-> 5193 return pivot(self, index=index, columns=columns, values=values)
5194
5195 _shared_docs['pivot_table'] = """
~/scipy/pandas/pandas/core/reshape/reshape.py in pivot(self, index, columns, values)
406 else:
407 indexed = self._constructor_sliced(self[values].values,
--> 408 index=index)
409 return indexed.unstack(columns)
410
~/scipy/pandas/pandas/core/series.py in __init__(self, data, index, dtype, name, copy, fastpath)
260 'Length of passed values is {val}, '
261 'index implies {ind}'
--> 262 .format(val=len(data), ind=len(index)))
263 except TypeError:
264 pass
ValueError: Length of passed values is 8, index implies 2