Допустим, у меня есть такие данные
df = pd.DataFrame({"MONTHS":[1,2,3,4,5,6], "METRIC":[430,584,648,571,610,535]})
df = pd.DataFrame({"МЕСЯЦА":[1,2,3,4,5,6], "МЕТРИЧЕСКАЯ":[430 584 648 571 610 535]}) что я хочу сделать, это найти сумму столбца метрики = 3378
MONTHS NEW_METRIC
0 3378
1 3378
2 2948
3 2794
4 2730
5 2807
6 2768
Итак, здесь в основном создана новая строка с добавленным 0, и соответствующая новая метрика представляет собой сумму, а для значения 1 это также сумма для новой метрики, но из месяца = 2 следует вычесть значение задержки метрики (3378-430) и аналогично для месяцев3 это будет (3378-584) и т. д. до конца. В качестве первого шага я хотел сохранить сумму в результате, который не удался
sum_METRIC = df.agg({"METRIC":"sum"}).collect()[0]
result = sum_METRIC["sum(METRIC)"]
Этот объект с ошибкой «Серия» не имеет атрибута «собирать».
Как суммировать, а затем использовать задержку для вычитания?
Из полученной суммы можно вычесть МЕТРИЧЕСКИЕ:
In [11]: df["METRIC"].sum() - df["METRIC"].reindex(np.arange(0, 7)).shift(2).fillna(0)
Out[11]:
0 3378.0
1 3378.0
2 2948.0
3 2794.0
4 2730.0
5 2807.0
6 2768.0
Name: METRIC, dtype: float64
@QuangHoang без переиндексации вы не начнете с 0 МЕСЯЦЕВ, что соответствует ожидаемым ОП. Да может и не надо...
Я подумал reindex
добавить дополнительную строку, как хочет ОП. Кроме reindex
, есть ли другие более короткие способы создания дополнительной строки?
@AndyHayden- Спасибо, но есть ли способ динамически указать длину df вместо 7 (длина + 1)?
@viji np.arange(df.MONTHS.iloc[0] - 1, df.MONTHS.iloc[-1])
@AndyHayden, спасибо, только что понял, что замена 7 на len(df)+1 также сработала
С использованием
df['New']=df["METRIC"].sum() - np.array([0,0]+df["METRIC"].tolist())[:len(df)]
df
Out[307]:
MONTHS METRIC New
0 1 430 3378
1 2 584 3378
2 3 648 2948
3 4 571 2794
4 5 610 2730
5 6 535 2807
Не уверен, что вам нужно
reindex
.