#python #pandas
#python #pandas
Вопрос:
У меня есть данные о продажах до июля 2020 года, и я хочу спрогнозировать следующие 3 месяца, используя скорость восстановления. Это фрейм данных:
test = pd.DataFrame({'Country':['USA','USA','USA','USA','USA'],
'Month':[6,7,8,9,10],
'Sales':[100,200,0,0,0],
'Recovery':[0,1,1.5,2.5,3]
})
Вот как это выглядит:
Теперь я хочу добавить «прогнозируемый» столбец, полученный в этом фрейме данных:
Первое значение 300 в строке 3, в основном (200 * 1.5/1)
. В дальнейшем это будет наше базовое значение, поэтому следующее значение, т. е. 500, в основном (300 * 2.5/1.5)
и так далее. Как мне выполнить итерацию по каждой строке, начиная со строки 3 и далее? Я пытался использовать shift (), но не смог выполнить итерацию по строкам.
Комментарии:
1. голос за копирование примера вставки!
2. показывать код с помощью
shift()
, потому что это моя первая идея. Но проблема в том, что вам нужно не только предыдущее значение изSales
иRecovery
, но также изPredicted
, и это может создать проблему.
Ответ №1:
Вы могли бы сделать это следующим образом:
import pandas as pd
test = pd.DataFrame({'Country':['USA','USA','USA','USA','USA'],
'Month':[6,7,8,9,10],
'Sales':[100,200,0,0,0],
'Recovery':[0,1,1.5,2.5,3]
})
test['Prediction'] = test['Sales']
for i in range(1, len(test)):
#prevent division by zero
if test.loc[i-1, 'Recovery'] != 0:
test.loc[i, 'Prediction'] = test.loc[i-1, 'Prediction'] * test.loc[i, 'Recovery'] / test.loc[i-1, 'Recovery']
Ответ №2:
Последовательность, которая у вас есть, прямо сводится к восстановлению * базовый уровень (Продажи = 200)
Вы можете вычислить эту последовательность следующим образом:
valid_sales = test.Sales > 0
prediction = (test.Recovery * test.Sales[valid_sales].iloc[-1]).rename("Predicted")
А затем объединять по индексу, вставлять столбец или объединять:
pd.concat([test, prediction], axis=1)