Для воспроизведения df:
df = pd.DataFrame({'date':[1,1,1,2,2,3],'product': ['X']*6,'quantity':[2,-1,-2,1,1,-1],'price':[1,2,4,1,2,4]})
Процесс, который вы описываете, может использовать groupby и aggregate, что-то вроде этого:
df.groupby('date').sum()
Но я не совсем понимаю ваши правила для сопоставления. Таким образом, в первый день я получил другую общую прибыль. Цена * количество равно (+ 2 * 1) + (- 1 * 2) + (- 2 * 4) = - 8, поэтому прибыль кажется равной 8.
Использование iterrow () - довольно плохая практика , Мало того, что вы пишете избыточный код, но и, вероятно, он намного медленнее (проверьте сравнение здесь) .
Большинство задач такого типа можно выполнить, комбинируя groupby (), aggregate () и применить (). Посмотрите этот замечательный учебник .
Надеюсь, это поможет вам или будущим ответам:)