I have a table in csv format that looks like this. I would like to transpose the table so that the values in the indicator name column are the new columns,
Indicator Country Year Value 1 Angola 2005 6 2 Angola 2005 13 3 Angola 2005 10 4 Angola 2005 11 5 Angola 2005 5 1 Angola 2006 3 2 Angola 2006 2 3 Angola 2006 7 4 Angola 2006 3 5 Angola 2006 6
I would like the end result to like like this:
Country Year 1 2 3 4 5 Angola 2005 6 13 10 11 5 Angola 2006 3 2 7 3 6
I have tried using a pandas data frame with not much success.
print(df.pivot(columns = 'Country', 'Year', 'Indicator', values = 'Value'))
Any thoughts on how to accomplish this?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can use pivot_table:
pd.pivot_table(df, values = 'Value', index=['Country','Year'], columns = 'Indicator').reset_index()
this outputs:
Indicator Country Year 1 2 3 4 5 0 Angola 2005 6 13 10 11 5 1 Angola 2006 3 2 7 3 6
Method 2
This is a guess: it’s not a “.csv” file, but a Pandas DataFrame imported from a ‘.csv’.
To pivot this table you want three arguments in your Pandas “pivot”. e.g., if
df is your dataframe:
table = df.pivot(index='Country',columns='Year',values='Value') print (table)
This should should give the desired output.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0