У меня есть датафрейм
import pandas as pd
df = pd.DataFrame({
'PART_UNIT': ['A','A','A','A','A'],
'FiscalYear': ['2015/2016','2016/2017','2017/2018','2018/2019','2019/2020'],
'BUY_UNIT_PRICE': [30,32,33,31,35]
})
То, что я преобразовал в сводную_таблицу
pivot = df.pivot_table(index='PART_UNIT', columns='FiscalYear', values='BUY_UNIT_PRICE', aggfunc='mean')
print(pivot)
FiscalYear 2015/2016 2016/2017 2017/2018 2018/2019 2019/2020
PART_UNIT
A 30 32 33 31 35
Ищу помощи в определении развития из года в год
Мой желаемый результат для этого примера данных будет
FiscalYear 2015/2016 2016/2017 2017/2018 2018/2019 2019/2020
PART_UNIT
A 100 106.67 103,13 93,94 112,9
Как мне это сделать в Pandas?
Функция, за которой я следую, идентична функции в сводной таблице Excel, где вы можете выбрать «показать значения в процентах от предыдущего года».






Вы можете сделать pct_change() над axis=1, а затем multiply на 100 и, наконец, add 100, чтобы соответствовать ожидаемому результату:
m=(df.pivot_table(index='PART_UNIT', columns='FiscalYear',
values='BUY_UNIT_PRICE', aggfunc='mean'))
m.pct_change(axis=1).mul(100).add(100,fill_value=0)
FiscalYear 2015/2016 2016/2017 2017/2018 2018/2019 2019/2020
PART_UNIT
A 100.0 106.666667 103.125 93.939394 112.903226
@HenrikPoulsen как насчет m.where(m.isna(),m.pct_change(axis=1).mul(100).add(100,fill_value=0))
Работает как шарм Как насчет случая, когда у меня есть цена только в 2016/2017 и 2017/2018, здесь я хотел бы, чтобы 2016/2017 был индексом 100, а 2017/2018 был 103,125, остальные поля должны быть NULL