我有一个8列的数据框,如下所示:
我需要找到2010-2015年间绝对人口绝对变化最大的县吗?
例如如果五年期间的县人口数为100、120、80、105、100、130,则其在此期间的最大变化为| 130-80 |。 = 50。 我能够提出一个使用for循环和条件的解决方案,但这似乎并不是解决问题的最佳方法。如何使用pandas数据框函数编写简单的代码?
答案 0 :(得分:1)
在将参数min
设置为max
的同时,对数据帧使用axis
和1
方法。如果将列'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循环要好。