【问题标题】:Get group where mean of certain column is max获取某个列的平均值为最大值的组
【发布时间】:2020-11-12 20:33:49
【问题描述】:

我的数据框如下所示(10K 行):

price distance    cab_type    ride_type   temp    rain    weekend time price_per_km
0 9.612   4.54    Lyft    Shared  6.90    0.02    0.0 22:53:00    2.117181  
1 2.728   0.63    Uber    Regular 5.09    0.00    0.0 18:38:00    4.330159
2 7.512   4.38    Uber    Regular 3.69    0.00    0.0 15:58:00    1.715068  

我需要找到平均值 price_per_km 最高的时间。我已经按小时对数据进行了分组

grouped = df.groupby(df.time.map(lambda t: t.hour))

每小时创建 24 个组,其中包含所有数字数据的统计信息。我可以通过

选择 price_per_km 的平均值的最大值
max(grouped['price_per_km'].mean())

我得到了最大均值的值,但不知道如何得到它在哪一行(它属于哪个组)。我可以打印组对象并通过print(grouped.describe()) 手动查找它在哪一行,但这效率不高,而且组数越多就越困难。

那么,当我知道最大均值时,如何获得组呢?注意我不想要原始 DF 中的行,我只能找到这样的帖子。

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    使用Series.idxmax:

    out = df.groupby(df.time.map(lambda t: t.hour))['price_per_km'].mean().idxmax()
    

    【讨论】:

    • 正如帖子末尾的注释所说,我不想要行,我想要组号(索引),例如 22。s 也是未定义的,是为了是grouped?
    • @Ruli - 这意味着样本数据中的18,因为price_per_km 是最大的?每个18 只有一个值,因此与相关样本数据中的平均值相同。
    • 我的错,应该显示更多的示例数据,当然在 10K 行上重复小时,但是是的 idmax 是我正在寻找的
    猜你喜欢
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2020-03-22
    相关资源
    最近更新 更多