Вот попытка использовать функцию cumsum (), чтобы получить ваш инвентарь под рукой. Я еще не научился работать с группировкой продуктов, так что на самом деле это может быть шагом в неправильном направлении. Тем не менее, он здесь для обсуждения:
import pandas as pd
def get_change(amount, type):
if type == 'Buy':
return amount
else:
return -amount
df = pd.DataFrame( {
'Products': ['Prod1'] * 10 ,
'Single Value': ['-112.2', '-221.84', '339.93', '-855.5', '68.4', '45.1', '1.179.10', '-355.52', '-23.23', '-3235.33'],
'Amount': [ 15, 12, 48, 13, 90, 10, 12, 15, 18, 300],
'Type': [ 'Buy', 'Sell', 'Buy', 'Buy', 'Buy', 'Sell', 'Sell', 'Buy', 'Sell', 'Sell']
} )
df['change'] = df.apply( lambda row : get_change( row['Amount'], row['Type'] ), axis = 1 )
df['onhand'] = df['change'].cumsum()
print(df)
Доходность:
Products Single Value Amount Type change onhand
0 Prod1 -112.2 15 Buy 15 15
1 Prod1 -221.84 12 Sell -12 3
2 Prod1 339.93 48 Buy 48 51
3 Prod1 -855.5 13 Buy 13 64
4 Prod1 68.4 90 Buy 90 154
5 Prod1 45.1 10 Sell -10 144
6 Prod1 1.179.10 12 Sell -12 132
7 Prod1 -355.52 15 Buy 15 147
8 Prod1 -23.23 18 Sell -18 129
9 Prod1 -3235.33 300 Sell -300 -171
Тем не менее, это работает для меня только тогда, когда продукт такой же (как в вашем примере данных) . Эксперименты с groupby('Products')
не дали результатов, которые я ищу в столбце ниже. Из-за этого ограниченного прогресса я предлагаю это как подход - возможно, нежизнеспособный.