Сначала вам нужно рассчитать различия для каждого типа элемента.Одним из способов, как это сделать с пандами, было бы использование pivot_tables.Здесь вы указываете, какой именно фрейм данных (df), на основе каких столбцов рассчитывать (values = "TotalCost"), какую функцию использовать для его вычисления (aggfunc = np.diff) и как их группировать (index = ["ItemType"]).
diff = pandas.pivot_table(df, values="TotalCost", index=["ItemType"], aggfunc=np.diff)
У вашего случая выше есть только 2 возможных месяца.Если у вас их больше двух, то np.diff выдаст вам значения в списке.В этом случае у вас есть два варианта.Либо вы фильтруете фрейм данных, так что в нем всего два месяца.Это можно сделать следующим образом:
df = df[[a or b for a, b in zip(df["Year_Month"] == "Jul-2017", df["Year_Month"] == "Jun-2017")]]
Другой вариант - вычислить среднюю разницу в месяцах.Это можно сделать с помощью следующей функции, которую вы затем замените np.diff на:
def mean_diff(l):
return np.mean(np.diff(l))
Затем вы можете использовать это для вычисления разницы для каждого элемента:
df["Diff"] = [float(diff.loc[d]) for d in df["ItemType"]]
После этого вы просто сортируете по разнице (а затем по элементу, если есть несколько элементов с одинаковой разницей)
df.sort_values(by=["Diff", "ItemType", "Year_Month"]).drop(columns = 'Diff')