首页 > 解决方案 > 使用groupby函数后如何对表格进行平均排序?

问题描述

我有一个使用 groupby 函数创建的表,我想将其从最高均值排序到最低均值。但是,我不断收到错误消息:“'DataFrameGroupBy' 对象没有属性 'sort_values'”或有时“布尔对象不可调用”。

import pandas as pd
import numpy as np
df = pd.read_csv("Listings.csv")

df2 = df[df['city'].str.contains("Cape Town")] 
df2_by_neighbourhood = df2.groupby('neighbourhood')
df2_by_neighbourhood.describe()

df2_by_neighbourhood.sort_values(['mean'], ascending=False)

当我去掉最后一行时,表格很完美,但平均值不是从最高到最低。它给了我这个:

邻里 数数 意思是 性病 分钟 25% 50% 75% 最高价格
病房 1 207 1181 1422 210.0 524.0 750.0 1145 10000

(等等,总共93行)

使用 groupby 之前的数据如下所示:

邻里 城市 价格
115病房 开普敦 700

[19086 行 x 3 列]

在使用 groupby 函数之前,我无法对表格进行排序,因为 groupby 是我获取平均值的方式。

标签: pythonpandas

解决方案


你可以试试:

df2_by_neighbourhood['mean'].shift(0).sort_values(ascending=False)

mean列作为一个系列,按降序排列。

如果要按column 值的降序显示整个数据框df2_by_neighbourhood(而不仅仅是列) ,可以使用:meanmean

df2_by_neighbourhood.loc[df2_by_neighbourhood['mean'].shift(0).argsort().sort_values(ascending=False)]

编辑

从您新发布的示例数据中可以看出,您可以按如下方式获取meanof 列:price

df2_by_neighbourhood['price'].mean().sort_values(ascending=False)

获取您的数据样本并添加一些行,您可以看到如下结果:

data = {'neighbourhood': ['Ward 115', 'Ward 115', 'Ward 226', 'Ward 226'],
 'city': ['Cape Town', 'Cape Town', 'Cape Town', 'Cape Town'],
 'price': [700, 900, 1000, 1200]}
df2 = pd.DataFrame(data)

print(df2)

  neighbourhood       city  price
0      Ward 115  Cape Town    700
1      Ward 115  Cape Town    900
2      Ward 226  Cape Town   1000
3      Ward 226  Cape Town   1200

运行代码:

df2_by_neighbourhood = df2.groupby('neighbourhood')
df2_by_neighbourhood['price'].mean().sort_values(ascending=False)

输出:

neighbourhood
Ward 226    1100
Ward 115     800
Name: price, dtype: int64

这里,2组的平均值price按降序排序。


推荐阅读