按组计算中位数

2024-05-15 15:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的数据帧,其中有不同的计划id,每个计划id也有不同的路由id

   plan_id route_id   dtn
   801      12289     2629.0
   801      12289     1666.0
   801      12289     0.0
   801      12289     2216.0
   801      7734      2219.0
   801      7734      853.0
   653      8819      3375.0
   653      8819      2184.0
.
.
.
.

dtn以秒为单位。而dtn是到路线中下一次交付的距离,即在索引3处,是交付索引3和交付索引4之间的距离。**

我需要根据给定的计划id找到每个路由id的dtn中位数,并将其作为列附加到与相应的pid和路由id匹配的现有数据帧中。我如何做到这一点


Tags: 数据id距离路由单位路线pidroute
2条回答
import pandas as pd

df = pd.read_csv('data.csv') # Load dummy data (from original question example)

# Get median vals grouped by relevant cols
r_med = df.groupby('route_id')[['dtn']].median()
p_med = df.groupby('plan_id')[['dtn']].median()

# Append both relevant median vals as cols to each row
for i, row in df.iterrows():
    df.loc[i, 'median_route_dtn'] = r_med.loc[row['route_id'], 'dtn']
    df.loc[i, 'median_plan_dtn'] = p_med.loc[row['plan_id'], 'dtn']

给出以下df

   plan_id  route_id     dtn  median_route_dtn  median_plan_dtn
0      801     12289  2629.0            1941.0           1941.0
1      801     12289  1666.0            1941.0           1941.0
2      801     12289     0.0            1941.0           1941.0
3      801     12289  2216.0            1941.0           1941.0
4      801      7734  2219.0            1536.0           1941.0
5      801      7734   853.0            1536.0           1941.0
6      653      8819  3375.0            2779.5           2779.5
7      653      8819  2184.0            2779.5           2779.5

每条路线的中间带\u id:

    df.groupby('route_id')[['dtn']].median()

每个计划id的中位数:

 df.groupby('plan_id')[['dtn']].median()

相关问题 更多 >