Element-wise Division With Accumulated Numbers In Python?

- 1 answer

The title may come across as confusing (honestly, not quite sure how to summarize it in a sentence), so here is a much better explanation:

I'm currently handling a dataFrame A regarding different attributes, and I used a .groupby[].count() function on a data column age to create a list of occurrences:

A_sub = A.groupby(['age'])['age'].count()

A_sub returns a Series similar to the following (the values are randomly modified):

1    316
2    249
3    221
4    219
5    262
59    1
61    2
65    1
70    1
80    1
Name: age, dtype: int64

I would like to plot a list of values from element-wise division. The division I would like to perform is an element value divided by the sum of all the elements that has the index greater than or equal to that element. In other words, for example, for age of 3, it should return


The same calculation should apply to all the elements. Ideally, the outcome should be in the similar type/format so that it can be plotted.



Here is a quick example using numpy. A similar approach can be used with pandas. The for loop can most likely be replaced by something smarter and more efficient to compute the coefficients.

import numpy as np

ages = np.asarray([316, 249, 221, 219, 262])
coefficients = np.zeros(ages.shape)

for k, a in enumerate(ages):
    coefficients[k] = sum(ages[k:])

output = ages / coefficients


array([0.24940805, 0.26182965, 0.31481481, 0.45530146, 1.        ])

EDIT: The coefficients initizaliation at 0 and the for loop can be replaced with:

coefficients = np.flip(np.cumsum(np.flip(ages)))