在 pandas groupby/apply 之后删除 rownumber 列

问题描述 投票:0回答:1

我有这个数据(多个查询,每个查询有多个变体,每个变体有多个持续时间):

import pandas as pd

df = pd.DataFrame({
    "query":    ["q1", "q1", "q1", "q1", "q2" ],
    "variant":  [ "a",  "a",  "b",  "c",  "a" ],
    "duration": [ 50,   40,   30,   20,   90  ],
})

我希望有一个数据框,其中包含每个查询、每个变体的最快持续时间,并且每个查询中的变体按其持续时间排序。

这几乎有效:

df.groupby("query").apply(
    lambda x: x.groupby("variant").apply(
        lambda x: x.sort_values("duration").head(1)
    , include_groups=False).sort_values("duration")
, include_groups=False)

enter image description here

但我想删除标记的行号列。我也想知道是否有更好的方法来获得这个结果。

pandas dataframe group-by
1个回答
0
投票

不要使用嵌套

groupby
,这是非常低效的,而是排序和
drop_duplicates
:

out = (df.sort_values(by=['query', 'duration', 'variant'])
         .drop_duplicates(['query', 'variant'])
       )

输出:

  query variant  duration
3    q1       c        20
2    q1       b        30
1    q1       a        40
4    q2       a        90
© www.soinside.com 2019 - 2024. All rights reserved.