Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pandas pivot produces "ValueError: Index contains duplicate entries, cannot reshape" [duplicate]

I have a pandas table formatted as following:

  anger_metric  metric_name angle_value
0   71.0991 roll    14.6832
1   71.0991 yaw     0.7009
2   71.0991 pitch   22.5075
3   90.1341 roll    4.8566
4   90.1341 yaw     6.4458
5   90.1341 pitch   -10.1930

I need to create a view of this that pivots it to sth like this:

  anger_metric  roll yaw pitch 
0   71.0991     14.6832 0.7009 22.5075
1   90.1341     4.8566  6.4458 -10.1930

Here is my code:

df2= results.pivot(index='anger_metric', columns='metric_name', values='angle_value')
# results is the pnadas table/list

I get the following error:

ValueError: Index contains duplicate entries, cannot reshape

How to handle this?

like image 629
A_Matar Avatar asked Oct 02 '17 15:10

A_Matar


Video Answer


2 Answers

Try pivot_table:

df
   anger_metric metric_name  angle_value
0       71.0991        roll      14.6832
1       71.0991         yaw       0.7009
2       71.0991       pitch      22.5075
3       90.1341        roll       4.8566
4       90.1341         yaw       6.4458
5       90.1341       pitch     -10.1930

result = df.pivot_table(index='anger_metric', 
                        columns='metric_name', 
                        values='angle_value')
result.columns.name = None

result
                pitch     roll     yaw
anger_metric                          
71.0991       22.5075  14.6832  0.7009
90.1341      -10.1930   4.8566  6.4458
like image 62
cs95 Avatar answered Oct 21 '22 13:10

cs95


By using unstack

df.groupby(['anger_metric','metric_name'])['angle_value'].sum().unstack(-1)# you can using `mean` instead of `sum`
Out[433]: 
metric_name     pitch     roll     yaw
anger_metric                          
71.0991       22.5075  14.6832  0.7009
90.1341      -10.1930   4.8566  6.4458
like image 39
BENY Avatar answered Oct 21 '22 14:10

BENY