Если вы ищете медианное значение для данного идентификатора плана и rout_id, почему вы используете сумму? используя представленный вами df:
df=pd.DataFrame({
"plan_id":[801,801,801,801,801,801,653,653],
"route_id": [12289,12289,12289,12289,7734,7734,8819,8819],
"dtn":[2629,1666,7700,2216,2219,853,3375,2184]})
Я изменил столбец dtn на маленькие числа, чтобы было легче понять медиану:
df["dtn"]=range(1,9)
df
plan_id route_id dtn
0 801 12289 1
1 801 12289 2
2 801 12289 3
3 801 12289 4
4 801 7734 5
5 801 7734 6
6 653 8819 7
7 653 8819 8
Из этого примера вы можете видеть, что медиана pid 801 для данного route_id 12289 является медианой этой группы чисел: [1,2,3,4]. это означает 2,5
медиана pid 801 и идентификатора маршрута 7734 - это медиана [5,6], поэтому это 5,5 и так далее ..
результат может быть получен с помощью:
grouped=df.groupby(['plan_id','route_id'])['dtn'].median().reset_index()
grouped
plan_id route_id dtn
0 653 8819 7.5
1 801 7734 5.5
2 801 12289 2.5
теперь вы можете объединить свой df с сгруппированным, чтобы получить медианное значение для каждого pid и идентификатора маршрута в виде столбца
df.merge(grouped, left_on=['plan_id','route_id'],right_on=
['plan_id','route_id'],suffixes=("","_median"))
plan_id route_id dtn dtn_median
0 801 12289 1 2.5
1 801 12289 2 2.5
2 801 12289 3 2.5
3 801 12289 4 2.5
4 801 7734 5 5.5
5 801 7734 6 5.5
6 653 8819 7 7.5
7 653 8819 8 7.5