Home > Mobile >  How to divide a dataframe dynamically (based on first ocurrence in the row)
How to divide a dataframe dynamically (based on first ocurrence in the row)

Time:10-15

I have a dataframe (below), which i need to map how much of the first ocurrence is left is the subsequent periods. For example, in 2020-02, i had 15 items. In 2020-03, i have 0,86 left. In the next month (2020-04), i have 0,533 left, and so on.

dates    2020-01  2020-02  2020-03  2020-04  2020-05  2020-06  2020-07  2020-08  2020-09  2020-10  2020-11  2020-12  2021-01  2021-02  2021-03  2021-04  2021-05  2021-06  2021-07  2021-08  2021-09  2021-10
inicio                                                                                                                                                                                                       
2020-01      2.0      2.0      2.0      2.0      2.0      1.0      1.0      1.0      1.0      1.0      1.0      1.0      1.0      1.0      1.0      1.0      1.0      1.0      1.0      NaN      NaN      NaN
2020-02      NaN     15.0     13.0      8.0      5.0      4.0      3.0      2.0      2.0      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN
2020-03      NaN      NaN     37.0     33.0     25.0     19.0      9.0      5.0      4.0      4.0      3.0      1.0      1.0      1.0      1.0      1.0      1.0      1.0      NaN      NaN      NaN      NaN
2020-04      NaN      NaN      NaN     75.0     65.0     42.0     27.0     18.0     10.0      7.0      3.0      2.0      1.0      1.0      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN
2020-05      NaN      NaN      NaN      NaN    171.0    150.0     98.0     60.0     41.0     25.0     16.0     11.0     11.0      6.0      5.0      4.0      4.0      2.0      2.0      2.0      NaN      NaN
2020-06      NaN      NaN      NaN      NaN      NaN    152.0    132.0     78.0     56.0     34.0     23.0     18.0     14.0     13.0     11.0      9.0      7.0      6.0      6.0      4.0      2.0      1.0
2020-07      NaN      NaN      NaN      NaN      NaN      NaN    159.0    139.0     95.0     59.0     32.0     18.0     14.0     10.0      9.0      8.0      7.0      4.0      3.0      2.0      1.0      1.0
2020-08      NaN      NaN      NaN      NaN      NaN      NaN      NaN    186.0    166.0     98.0     59.0     43.0     33.0     26.0     24.0     16.0     10.0      7.0      6.0      3.0      1.0      NaN
2020-09      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN    197.0    164.0     95.0     62.0     43.0     31.0     25.0     21.0     19.0     14.0      7.0      4.0      2.0      1.0
2020-10      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN    234.0    199.0    138.0    107.0     81.0     60.0     41.0     23.0     16.0      8.0      5.0      3.0      2.0
2020-11      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN    281.0    256.0    197.0    158.0    105.0     79.0     58.0     34.0     22.0     13.0      8.0      8.0
2020-12      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN    384.0    348.0    263.0    200.0    137.0    102.0     61.0     25.0      9.0      3.0      1.0
2021-01      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN    332.0    303.0    230.0    144.0    108.0     76.0     39.0     13.0      2.0      1.0
2021-02      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN    167.0    148.0     82.0     60.0     38.0     31.0     11.0      3.0      2.0
2021-03      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN    226.0    204.0    119.0     72.0     43.0     19.0      5.0      2.0
2021-04      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN    191.0    155.0     98.0     57.0     33.0     21.0     12.0
2021-05      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN    149.0    121.0     69.0     30.0      6.0      5.0
2021-06      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN    122.0     84.0     26.0      3.0      NaN
2021-07      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN    143.0     91.0      9.0      4.0
2021-08      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN     59.0     22.0      7.0
2021-09      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN     75.0     43.0
2021-10      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      NaN      4.0

I was trying to solve this with this function below, but it grabs only the first column, not the first occurrence in the row.

size = pivot.iloc[:,0]
retention = pivot.divide(size, axis=0)

Unfortunately, i could not figure out a way to solve this. Any ideas? Thanks for now!

CodePudding user response:

Try with max then div

retention = pivot.div(pivot.max(),0)
  • Related