У меня есть данные временного ряда, приведенные ниже:
date product price amount
11/01/2019 A 10 20
11/02/2019 A 10 20
11/03/2019 A 25 15
11/04/2019 C 40 50
11/05/2019 C 50 60
У меня есть многомерные данные, и я только что добавил упрощенную версию с двумя столбцами {цена, количество}. Я пытаюсь преобразовать его относительно на основе индекса времени, показанного ниже:
date product price amount
11/01/2019 A NaN NaN
11/02/2019 A 0 0
11/03/2019 A 15 -5
11/04/2019 C NaN NaN
11/05/2019 C 10 10
Я пытаюсь получить относительные изменения каждого продукта на основе индексов времени. Если для указанного продукта не существует предыдущей даты, я добавляю «NaN».
Подскажите, пожалуйста, есть ли какая-нибудь функция для этого?
Сгруппируйте по product
и используйте .diff()
df[["price", "amount"]] = df.groupby("product")[["price", "amount"]].diff()
выход :
date product price amount
0 2019-11-01 A NaN NaN
1 2019-11-02 A 0.0 0.0
2 2019-11-03 A 15.0 -5.0
3 2019-11-04 C NaN NaN
4 2019-11-05 C 10.0 10.0
Конечно, используйте что-то вроде cols = ["price", "amount"]
, а если вам нужны другие столбцы, то others = [c for c in df.columns if c not in ("price", "amount")]
тогда вы можете выбрать все others
с помощью df[others]
.
Есть ли способ вставить столбцы без именования, например [["price", "amount"]]? У меня есть многомерные данные, и я пытаюсь ввести столбцы, кроме {"date", "product"}.