我有一个这样的数据框,其中有不同的计划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匹配的现有数据帧中。我该怎么办?
答案 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