【问题标题】:How to sort a table by mean after using groupby function?使用groupby函数后如何对表格进行平均排序?
【发布时间】:2021-05-18 03:54:22
【问题描述】:

我有一个使用 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)

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

neighbourhood count mean std min 25% 50% 75% price max
Ward 1 207 1181 1422 210.0 524.0 750.0 1145 10000

(等等,共93行)

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

neighbourhood city price
Ward 115 Cape Town 700

[19086 行 x 3 列]

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

【问题讨论】:

  • 你提到了the table comes out perfectly, but **the mean** isn't from highest to lowest. 那么,mean 的列名是什么或者它在哪里?

标签: python pandas


【解决方案1】:

你可以试试:

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

以降序获取mean 列。

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

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

编辑

从您新发布的样本数据中可以看出,您可以将price列的mean取如下:

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的平均值按降序排列。

【讨论】:

  • 这给了我另一个错误:“'Column not found: mean'”
  • @atrimi 我从您的代码中看到您尝试访问列名mean。这就是为什么我认为您的数据应该有该列的原因。您还提到您看到了平均值,但顺序不正确。为了让我们更好地帮助您,请发布一些示例数据。
  • 感谢您的反馈,我已经用一些数据编辑了帖子。我不确定为什么找不到“平均”列,就是它的名称。
  • @atrimi 您看到的平均值是.describe() 的输出,这是 Pandas 提供的标准统计信息。它不是数据框中的真实数据。因此,您无法对其进行排序。
  • 有道理。谢谢!
猜你喜欢
  • 2011-10-05
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2021-07-22
相关资源
最近更新 更多