Home > Enterprise >  pandas - transpose matrix in python
pandas - transpose matrix in python

Time:01-07

I'm working with transformations to table data but now I am kinda stuck in a transpose of a table that is currently a dataframe.

Here is my table:

          0        1       2
0        NA     2005    2006
1    GREECE     78.4    97.6
2  PORTUGAL    127.3   128.1

So both Greece and Portugal has values for the 2005 and 2006 year. What I need to do is to each row correspond to a Country and a singular year this way:

          0       1        2
0        NA    YEAR    VALUE
1    GREECE    2005     78.4    
2    GREECE    2006     97.6
3  PORTUGAL    2005    127.3
4  PORTUGAL    2006    128.1

What would be the best way to achive this? I am working with dataframes in python.

CodePudding user response:

Why aren't you using the index functionality in pandas? It would make much more sense if the country was the row index, and the year was the columns:

import pandas as pd

df = pd.read_clipboard() # Your df here

df = pd.DataFrame(
    df.iloc[1:, 1:].values,
    columns=df.iloc[0, 1:].values,
    index=df.iloc[1:, 0].values
)
#           2005.0  2006.0
# GREECE      78.4    97.6
# PORTUGAL   127.3   128.1

# Now you can use built-in pandas functionality:
out = df.melt(var_name="YEAR", value_name="VALUE", ignore_index=False)
#             YEAR  VALUE
# GREECE    2005.0   78.4
# PORTUGAL  2005.0  127.3
# GREECE    2006.0   97.6
# PORTUGAL  2006.0  128.1

# Or similarly:
out = df.stack().to_frame("VALUE").reset_index(names=["COUNTRY", "YEAR"])
#     COUNTRY    YEAR  VALUE
# 0    GREECE  2005.0   78.4
# 1    GREECE  2006.0   97.6
# 2  PORTUGAL  2005.0  127.3
# 3  PORTUGAL  2006.0  128.1

CodePudding user response:

have a look at pandas pd.melt command: https://pandas.pydata.org/docs/reference/api/pandas.melt.html

  • Related