У меня есть этот dataframe test_data:
Deal Year Month Billing Running_total payment over_payment
2 A 2018 December 21167.99 21167.99 1270.08 0.00
3 A 2018 December -3184.59 17983.40 -1270.08 0.00
4 A 2019 January 1855.10 19838.50 0.00 -1270.08
5 A 2019 February 400.00 20238.50 0.00 0.00
6 A 2019 March 600.00 20838.50 0.00 0.00
7 A 2019 April 1000.00 21838.50 0.00 0.00
Я хочу продолжить передачу отрицательной суммы в переплате до следующей строки, пока 6% от Running_total меньше абсолютного значения -1270до тех пор, пока 6% от значения Running_total не станет больше или равно абсолютному значению over_payment, тогда установите значение over_payment равным 0. Я должен выполнить приведенный ниже код четыре раза, прежде чем получу правильный вывод, я думаю, что это должно бытьпроблема с установкой в следующей строке значения over_payment до того, как итерация достигнет этого индекса #. Я пытаюсь сделать это на уровне «Сделка», поэтому я включил условие, когда имя следующей сделки должно быть равно текущемуодин, поэтому он не переносится, например, на сделку "B", а только вносит изменения в соответствующую сделку.
Вот что я пробовал:
for index, row in test_data.iterrows():
if row['over_payment'] <0:
if (row['Running_Total'] * .06)>abs(row['over_payment']):
test_data.at[index, 'over_payment']= 0
test_data.at[index, 'Rebate']= (row['Running_Total'] * .06) + (row['over_payment'])
elif (row['Running_Total'] * .06)< abs(row['over_payment']):
next_index= str(int(index) + 1)
last_index= str(int(index) - 1)
if test_data.at[index, 'Deal'] ==test_data.at[next_index, 'Deal']:
test_data.at[next_index, 'over_payment'] = test_data.at[index, 'over_payment']
else:
test_data.at[index, 'over_payment'] = test_data.at[last_index, 'over_payment']
Желаемый результат:
Deal Year Month Billing Running_total payment over_payment
2 A 2018 December 21167.99 21167.99 1270.08 0.00
3 A 2018 December -3184.59 17983.40 -1270.08 0.00
4 A 2019 January 1855.10 19838.50 0 -1270.08
5 A 2019 February 400.00 20238.50 0 -1270.08
6 A 2019 March 600.00 20838.50 0 -1270.08
7 A 2019 April 1000.00 21838.50 40.23 0