Michael Scofield
Michael Scofield

Reputation: 147

How to find the cumprod for dataframe by reserving the row values?

I have dataframe df:

            0    1    2    3    4    5   6
Row Labels
2017 A1    2.0  2.0  NaN  2.0  NaN  2.0 NaN
2017 A2    2.0  2.0  2.0  NaN  2.0  2.0 NaN
2017 A3    2.0  2.0  2.0  2.0  2.0  2.0 NaN
2017 A4    2.0  2.0  2.0  2.0  2.0  2.0 NaN
2018 A1    2.0  2.0  2.0  2.0  NaN  NaN NaN
2019 A2    2.0  2.0  2.0  NaN  NaN  NaN NaN
2020 A3    2.0  2.0  NaN  NaN  NaN  NaN NaN
2021 A4    2.0  NaN  NaN  NaN  NaN  NaN NaN

I have to find the cumprod of the dataframe by reversing row values: I tried this code ;

df1 = df[::-1].cumprod(axis=1)[::-1]

i got output like this ,

              0    1    2     3     4     5   6
Row Labels
2017 A1     2.0  4.0  NaN   8.0   NaN  16.0 NaN
2017 A2     2.0  4.0  8.0   NaN  16.0  32.0 NaN
2017 A3     2.0  4.0  8.0  16.0  32.0  64.0 NaN
2017 A4     2.0  4.0  8.0  16.0  32.0  64.0 NaN
2018 A1     2.0  4.0  8.0  16.0   NaN   NaN NaN
2019 A2     2.0  4.0  8.0   NaN   NaN   NaN NaN
2020 A3     2.0  4.0  NaN   NaN   NaN   NaN NaN
2021 A4     2.0  NaN  NaN   NaN   NaN   NaN NaN

But expected output is ;

              0    1    2     3     4     5   6
Row Labels
2017 A1     16.0  8.0   NaN   4.0   NaN  2.0  NaN
2017 A2     32.0  16.0  8.0   NaN   4.0  2.0  NaN
2017 A3     64.0  32.0  16.0  8.0   4.0  2.0  NaN
2017 A4     64.0  32.0  16.0  8.0   4.0  2.0  NaN
2018 A1     16.0  8.0   4.0   2.0   NaN  NaN  NaN
2019 A2     8.0   4.0   2.0   NaN   NaN  NaN  NaN
2020 A3     4.0   2.0   NaN   NaN   NaN  NaN  NaN
2021 A4     2.0   NaN   NaN   NaN   NaN  NaN  NaN

Thank You For Your Time :)

Upvotes: 1

Views: 97

Answers (1)

jezrael
jezrael

Reputation: 862611

Use DataFrame.iloc with first : for select all rows and ::-1 for swapping by columns:

df1 = df.iloc[:, ::-1].cumprod(axis=1).iloc[:, ::-1]
print (df1)
               0     1     2    3    4    5   6
Row Labels                                     
2017 A1     16.0   8.0   NaN  4.0  NaN  2.0 NaN
2017 A2     32.0  16.0   8.0  NaN  4.0  2.0 NaN
2017 A3     64.0  32.0  16.0  8.0  4.0  2.0 NaN
2017 A4     64.0  32.0  16.0  8.0  4.0  2.0 NaN
2018 A1     16.0   8.0   4.0  2.0  NaN  NaN NaN
2019 A2      8.0   4.0   2.0  NaN  NaN  NaN NaN
2020 A3      4.0   2.0   NaN  NaN  NaN  NaN NaN
2021 A4      2.0   NaN   NaN  NaN  NaN  NaN NaN

Upvotes: 3

Related Questions