Как сделать вычисления и сгруппировать по индексу?
Загружаю файл, делаю индексом одну из колонок - СубконтоДт1. Необходимо сгруппировать по СубконтоДт1, сделать вычисления и вывести.
Исходная таблица:
СубконтоДт1 Период СубконтоДт1 Сумма Цена
Утеплитель 2018-09-21 ФОРПОСТ 16193.90 1124.58
Утеплитель 2018-07-12 ФОРПОСТ 15559.32 1296.61
Утеплитель 2019-09-13 ФОРПОСТ 4060.80 1410.00
Валик 2019-02-25 Электро 172.50 172.50
Валик 2019-05-08 Электро 182.00 182.00
И много еще других позиций.
Я посчитал отклонение в цене конкретного материала (СубконтоДт1) следующим образом:
df['Цена'] = df['Сумма'] / df['Количество']
x = df.loc[['Поддон 1250*2500'], ['Период', 'СубконтоКт1', 'Цена']]
x1 = x.nlargest(1, 'Цена')
x2 = x.nsmallest(1, 'Цена')
x['Процент отклонения'] = (x1['Цена'] - x2['Цена']) / (x2['Цена'] / 100)
pd.set_option('display.precision', 2)
x
СубконтоДт1 Период СубконтоКт1 Цена Процент отклонения
Поддон 1250*2500 2018-09-25 СтальСоюз ПК 550.85 10.77
Поддон 1250*2500 2019-06-21 СтальСоюз ПК 541.67 10.77
Поддон 1250*2500 2019-06-08 СтальСоюз ПК 541.67 10.77
Поддон 1250*2500 2019-02-12 СтальСоюз ПК 600.00 10.77
Хотел бы получить на основании первой таблицы следующее:
СубконтоДт1 СубконтоКт1 Процент отклонения
Утеплитель ФОРПОСТ 12 %
Валик Электро 11%
Поддон 1250*2500 СтальСоюз ПК 10.77%
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
res = (df
.groupby(["СубконтоДт1", "СубконтоДт1.1"])["Цена"]
.agg(lambda x: (x.max()-x.min())/x.min()*100)
.reset_index())
результат:
In [22]: res
Out[22]:
СубконтоДт1 СубконтоДт1.1 Цена
0 Валик Электро 5.507246
1 Утеплитель ФОРПОСТ 25.380142