Нет причин использовать numpy, панды уже включают все, что нам нужно.
A_sub
, кажется, возвращает Серию, где age
- индекс. Это не идеально, но должно быть хорошо. Поэтому приведенный ниже код работает с сериями, но его легко изменить для работы с фреймами данных.
import pandas as pd
s = pd.Series(data=np.random.randint(low=1, high=10, size=10), index=[0, 1, 3, 4, 5, 8, 9, 10, 11, 13], name="age")
print(s)
res = s / s[::-1].cumsum()[::-1]
res = res.rename("cumsum div")
Я видел ваш комментарий об отсутствующих возрастах в индексе. Вот как вы должны добавить отсутствующие индексы в диапазоне от минимального до максимального индекса, а затем выполнить деление.
import pandas as pd
s = pd.Series(data=np.random.randint(low=1, high=10, size=10), index=[0, 1, 3, 4, 5, 8, 9, 10, 11, 13], name="age")
s_all_idx = s.reindex(index=range(s.index.min(), s.index.max() + 1), fill_value=0)
print(s_all_idx)
res = s_all_idx / s_all_idx[::-1].cumsum()[::-1]
res = res.rename("all idx cumsum div")