【问题标题】:Maximum difference of values in the columns of a pandas dataframe熊猫数据框列中值的最大差异
【发布时间】:2020-08-17 12:46:44
【问题描述】:

我有一个包含 8 列的数据框,如下所示:

  1. 索引
  2. 县名
  3. 2010 年人口普查的人口
  4. 2011 年人口普查的人口
  5. 2012 年人口普查的人口
  6. 2013 年人口普查的人口
  7. 2014 年人口普查的人口
  8. 2015 年人口普查的人口

我需要找到 2010-2015 年期间人口绝对变化最大的县吗?

例如如果 5 年期间的县人口为 100、120、80、105、100、130,则其在该期间的最大变化为 |130-80| = 50。 我能够提出使用 for 循环和条件的解决方案,但这似乎不是解决问题的最佳方法。如何使用 pandas 数据框函数编写简单的代码?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    在将参数axis 设置为1 时,对数据帧使用minmax 方法。如果您将列 'Name of the counties' 设置为索引,它会更容易一些。然后你可以使用idxmax 来查找哪个县的范围最大。

    df = df.set_index('Name of the counties')
    (df.max(axis=1) - df.min(axis=1)).idxmax())
    

    【讨论】:

      【解决方案2】:
      import pandas as pd
      
      df = pd.DataFrame(
          {
              "country": ["India", "US", "China"],
              "2010": [200, 100, 300],
              "2012": [400, 200, 500],
              "2015": [800, 400, 700],
          }
      )
      
      df["abs_change"] = df.apply(
          lambda x: max(x[df.columns[-3:]]) - min(x[df.columns[-3:]]), axis=1
      )
      
      print(df.iloc[df[["abs_change"]].idxmax()])
      

      这可能是您的问题的一种可能的解决方案,而无需使用 for 循环。尽管我不能 100% 确定性能影响,但它可能比使用 for 循环更好。

      【讨论】:

      • 我认为您忘记将“国家”列设置为索引。打印语句中的 .idmax 也不会返回国家名称,对吗?这对我来说很好用: print(df["abs_change"].idxmax())
      猜你喜欢
      • 2021-09-13
      • 2017-12-30
      • 2021-11-10
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多