pandas 从数据集中提取值以执行功能-数据集中的多个国家

6g8kf2rb  于 2022-12-21  发布在  其他
关注(0)|答案(1)|浏览(126)

我的数据集如下所示:
| 国家|年份|价值|
| - ------| - ------| - ------|
| 爱尔兰|二○一○年|九|
| 爱尔兰|二○一一年|十一|
| 爱尔兰|二〇一二年|十四|
| 爱尔兰|二〇一三年|十七|
| 爱尔兰|二〇一四年|二十个|
| 法国|二○一一年|十五|
| 法国|二〇一二年|十九|
| 法国|二〇一三年|二十一|
| 法国|二〇一四年|二十八|
| 德国|二零零八年|十七|
| 德国|二○ ○九年|二十个|
| 德国|二○一○年|十九|
| 德国|二○一一年|二十四|
| 德国|二〇一二年|二十七|
| 德国|二〇一三年|三十二|
我的目标是创建一个新的数据集,告诉我与最近的数据相比,给定国家第一年可用数据的增长百分比,大致如下所示:
| 国家|增长百分比|
| - ------| - ------|
| 爱尔兰|一百二十二|
| 法国|八十七|
| 德国|八十八|
本质上,我需要数据集中每个国家的代码,以定位年份的最小值和最大值,然后在值列中获取相应的值并计算增长百分比。
我可以手动完成,但是我的数据集中有很多国家,我正在寻找一种更优雅的方式来完成它。我正在尝试排除我的代码故障,但是我还没有太多的运气。
我的代码目前看起来如下所示:

df_1["Min_value"] = df.loc[df["Year"].min(),"Value"].iloc[0]
df_1["Max_value"] = df.loc[df["Year"].max(),"Value"].iloc[0]

df_1["% increase"] = ((df_1["Max_value"]-df_1["Min_value"])/df_1["Min_value"])*100

这将返回一个错误:
属性错误:"numpy.float64"对象没有属性"iloc"
除此之外,它还有一个问题,我不能想出一种方法,让代码在我的数据集中为每个国家单独运行,所以这是另一个挑战,我不完全确定如何解决。
我是否可以沿着这条路走下去,界定一个特定的职能,然后适用于每个国家?

7kqas0il

7kqas0il1#

您可以按Country分组,并聚合YearValuemin/max,然后计算Valueminmax之间的percentage change

pct_df = df.groupby(['Country']).agg(['min', 'max'])['Value']\
    .apply(lambda x: x.pct_change().round(2) * 100, axis=1)\
    .drop('min', axis=1).rename(columns={'max':'% increase'}).reset_index()

print(pct_df)

输出:

Country  % increase
0   France         87.0
1  Germany         88.0
2  Ireland        122.0

相关问题