【问题标题】:Finding the highest value in a column for a given range in another column查找另一列中给定范围的列中的最大值
【发布时间】:2021-02-21 01:47:49
【问题描述】:

我对熊猫和数据框很陌生。我想从 1990 年到 1999 年(“年”)中给出最高收入(“收入”)的数据框中找到产品(“产品”)。

我的最佳尝试只给了我数据框中的行号和收入,尽管我希望它也显示所有其他列。

这是我最好的尝试:

HighestIncome90s = df.head(1)
HighestIncome90s = df.loc[(df['year'] >= 1990) & (df['year'] <= 1999), 'income'].nlargest()

【问题讨论】:

  • 如果你能从数据框中提供一个样本就好了。

标签: python pandas dataframe


【解决方案1】:

让我们尝试使用sort_values 修复您的代码

df = df.sort_values('income',ascending=False)

HighestIncome90s = df
HighestIncome90s = df.loc[(df['year'] >= 1990) & (df['year'] <= 1999), 'income'].head(1)

如果您想获取所有列

Allcol = df.loc[(df['year'] >= 1990) & (df['year'] <= 1999),].head(1)

【讨论】:

    【解决方案2】:

    我希望它也显示所有其他列。

    如果你使用 idxmax, 如

    max_income_idx = df.income[(df['year'] >= 1990) & (df['year'] <= 1999)].idxmax()
    

    那么它将是最大相关收入的指数。然后,您可以将其与 df.loc[max_income_idx, :] 一起使用以获取所有列。

    【讨论】:

      【解决方案3】:

      据我了解,您的源 DataFrame 包含以下收入数据 每个产品和年份,例如:

          year product  income
      0   1980      P1  120.15
      1   1990      P1  120.15
      2   1992      P1  140.20
      3   1994      P1  160.51
      4   1996      P1  171.04
      5   1988      P2  140.17
      6   1991      P2  145.17
      7   1993      P2  160.42
      8   1995      P2  181.73
      9   1989      P3  140.17
      10  1992      P3  175.17
      11  1994      P3  240.42
      12  1996      P3  315.73
      

      但您只对 19901999 之间的 year 行感兴趣。

      然后,您想将每种产品的收入相加(整个 10 年期间)。 这样做的代码是:

      wrk = df.query('year.between(1990,1999)').groupby('product').income.sum() 
      

      暂时,对于上面的源数据,我们有以下 系列

      product
      P1    591.90
      P2    487.32
      P3    731.32
      Name: income, dtype: float64
      

      (左列是索引,右列是每个人的总收入 产品)。

      并得到最终结果(“畅销”产品和总收入 它带来的)运行:

      result = wrk.sort_values(ascending=False).head(1)
      

      它也是一个系列,但只包含一个元素:

      product
      P3    731.32
      Name: income, dtype: float64
      

      P3为指数,731.32为总收益)。

      所有其他解决方案(到目前为止介绍的)为 一年(在感兴趣的时期内),而不是总计 这段时间的收入。

      【讨论】:

        【解决方案4】:

        第一步:此代码用于限制从 1990 年到 1999 年的年份

        df = df.query('year >= 1990 & age <= 1999')
        

        第二步:然后使用此代码从最高值排序收入

        df = df.sort_values('income', ascending=False)
        

        【讨论】:

          猜你喜欢
          • 2020-07-29
          • 2013-02-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-11
          • 2021-07-25
          • 1970-01-01
          相关资源
          最近更新 更多