Home > other >  How to reverse order of entire DataFrame
How to reverse order of entire DataFrame

Time:10-06

I'm working with a dataset on historical electricity prices for Ameren. The way the data is currently structured is in the reverse order of what I want. That is, it starts with the price for October 2022 and ends with the price for January 2017. It looks like this:

     Month  Residential Non-Space Heat  ...  Usage above 800 kWh    PEA
0   Oct-22                      12.236  ...                9.777  0.249
1   Sep-22                      10.628  ...                  NaN  0.021
2   Aug-22                      10.628  ...                  NaN -0.048
3   Jul-22                      10.628  ...                  NaN -0.053
4   Jun-22                      10.623  ...                  NaN -0.032
..     ...                         ...  ...                  ...    ...
65  May-17                       6.519  ...               -0.519    NaN
66  Apr-17                       6.519  ...               -0.523    NaN
67  Mar-17                       6.519  ...               -0.448    NaN
68  Feb-17                       6.519  ...               -0.322    NaN
69  Jan-17                       6.519  ...               -0.321    NaN

[70 rows x 5 columns]

What I'm wanting to do is reorder the dataframe so that it starts with Jan-17 and ends with Oct-22. I tried dataset.iloc[::-1] but it when I do print(dataset) it doesn't show that anything has changed. I also tried to use sort_values on the Month column, but It started ordering them like Oct-22, Oct-21, Oct-20,...Sept-22, Sept-21, and so on. Instead, I'm wanting it to be ordered like Jan-17, Feb-17, Mar-17,..., Sept-22, Oct-22. How would I reorder this dataframe in the desired way? Thanks!

CodePudding user response:

You need to re-assign your dataframe :

dataset = dataset.iloc[::-1]

# Output :

print(dataset)

     Month Residential Non-Space Heat  ... Usage above 800 kWh    PEA
69  Jan-17                      6.519  ...              -0.321    NaN
68  Feb-17                      6.519  ...              -0.322    NaN
67  Mar-17                      6.519  ...              -0.448    NaN
66  Apr-17                      6.519  ...              -0.523    NaN
65  May-17                      6.519  ...              -0.519    NaN
..     ...                        ...  ...                 ...    ...
4   Jun-22                     10.623  ...          NaN -0.032   None
3   Jul-22                     10.628  ...          NaN -0.053   None
2   Aug-22                     10.628  ...          NaN -0.048   None
1   Sep-22                     10.628  ...                 NaN  0.021
0   Oct-22                     12.236  ...               9.777  0.249

If the index is not important, use dataset = dataset.iloc[::-1].reset_index(drop=True).

CodePudding user response:

This should do the trick print(dataset[::-1])

CodePudding user response:

tried dataset.iloc[::-1] but it when I do print(dataset) it doesn't show that anything has changed

This means operation made was not inplace and you need to assign returned value, minimal example

import pandas as pd
df = pd.DataFrame({'X':['A','B','C'],'Y':['X','Y','Z']})
df = df.iloc[::-1]
print(df)

gives output

   X  Y
2  C  Z
1  B  Y
0  A  X
  • Related