首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas :按其他列分组的列的中位数

Pandas :按其他列分组的列的中位数
EN

Stack Overflow用户
提问于 2020-08-01 21:48:40
回答 1查看 37关注 0票数 0

我有一个这样的数据帧

代码语言:javascript
复制
 plan_id route_id   dtn
   801      12289     2629.0
   801      12289     1666.0
   801      12289     7700.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行驶的中值距离,并将其作为列附加到与相应的pid和route_id匹配的现有数据帧中。

我最初对dtn求和,以求出每条路线(Route_id)和plan_id的总行驶距离

代码语言:javascript
复制
df=df.groupby(['plan_id','route_id'])['dtn'].sum().reset_index()

然后我决定再次使用plan_id和route_id进行分组,以获得中位数

代码语言:javascript
复制
df.groupby(['plan_id','route_id')['dtn'].median()

但是,它会返回相同的总和数据帧,而不做任何更改。值得注意的是,一个plain_id可以有多个路由(Route_id),反之亦然。

EN

回答 1

Stack Overflow用户

发布于 2020-08-02 04:21:13

如果您正在寻找给定计划id和rout_id的中位数,为什么要使用sum?使用您介绍的df:

代码语言:javascript
复制
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列改为较小的数字,以便更容易理解中位数:

代码语言:javascript
复制
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

从这个例子中,您可以看到给定route_id 12289的pid 801的中位数是这组数字的中位数:1、2、3、4。

pid 801和路由id 7734的中位数是5,6的中位数,因此是5.5,以此类推。

可以通过以下命令获得结果:

代码语言:javascript
复制
    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与分组的df连接起来,以便以列的形式获得每个pid和路由id的中位数。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63205912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档