大熊猫数据框的列中的值的最大差值

时间:2020-05-03 03:48:32

标签: python pandas dataframe

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

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

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

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

2 个答案:

答案 0 :(得分:1)

在将参数min设置为max的同时,对数据帧使用axis1方法。如果将列'Name of the counties'设置为索引,将使其变得更容易。然后,您可以使用idxmax查找范围最大的县。

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

答案 1 :(得分:1)

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循环要好。