Если я правильно понимаю ваш код и комментарии, это будет делать то, что вы хотите:
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
df['Month'] = pd.Categorical(df['Month'], categories = months)
df = df.sort_values(['Item', 'Month'])
df['Net_Items'] = df['Adds'] - df['Subtracts']
df['Monthly_Available_Items'] = df.groupby('Item')['Net_Items'].cumsum()
df = df.reset_index(drop = True)
Будет возвращено:
Item Adds Subtracts Month Net_Items Monthly_Available_Items
0 A 71 30 Jan 41 41
1 A 62 58 Feb 4 45
2 B 19 7 Jan 12 12
3 B 65 26 Feb 39 51
4 C 68 30 Jan 38 38
5 C 58 34 Feb 24 62
6 D 34 19 Jan 15 15
7 D 26 21 Feb 5 20
8 E 180 91 Jan 89 89
9 E 222 129 Feb 93 182
Сначала преобразуйте столбец месяца в Категориальный (поскольку в алфавитном порядке декабрь до января и т. Д.). Затем вычислите Net_Items
как разницу между Adds
и Subtracts
. Наконец, рассчитать совокупную сумму для каждого из продуктов.
Предполагая, что январь является первым месяцем, интуиция состоит в том, что было добавлено 71 из Item A
и 30 удалено, что в сумме составило 31. В следующем месяце было добавлено 62 и 58 было удалено, поэтому итоговая сумма составила 4 добавляется к чистому итогу за предыдущий месяц, равному 41, для промежуточного итога 45.