Блок
by = "B" имеет дублированные индексы как в case1, так и в case2,
почему case1 работает, а case2 нет.
case1
df1 = pd.DataFrame({"a":[0,100,200], "by":["A","B","B"]}, index=[0,1,1])
df1.groupby("by").diff()
# result is okay
case2
df2 = pd.DataFrame({"a":[0,100,200], "by":["C","B","B"]}, index=[0,1,1])
df2.groupby("by").diff()
# throws ValueError: cannot reindex from a duplicate axis