用熊猫计算中位数

时间:2020-07-31 09:37:11

标签: python pandas pandas-groupby

我有一个这样的数据框,其中有不同的计划ID,每个计划ID也具有不同的route_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之间的距离。

我需要找到每个给定plan_id的每个route_id的dtn中位数,并将其作为列添加到与相应pid和route_id匹配的现有数据帧中。我该怎么办?

2 个答案:

答案 0 :(得分:0)

每个route_id的中位数:

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

每个plan_id的中位数:

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

答案 1 :(得分:0)

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