python - Pandas 索引和计算行效率想法矢量化代码
问题描述
我对 pandas 有点陌生,觉得应该有一种更有效的方法来获得最小年份和最大年份的差异,所以要针对每个国家/地区进行更改,而无需像我一样迭代每个国家/地区。我想对代码进行矢量化。也许这只是数据集的组织方式,但我一直在努力寻找矢量化解决方案。
有没有人有一个有效的想法,如何在不像我一样迭代国家的情况下运行它?我觉得应该有办法做到这一点。我在我的代码示例下方添加了一个数据集示例。
new_columns = ['CountryName', 'Forest Area Change' ]
dff = pd.DataFrame(columns=new_columns)
for country in countries:
forest_area_1990 = df[(df.CountryName == country) & (df.IndicatorCode == 'AG.LND.FRST.ZS') & (df.Year == 1990)].Value.values
forest_area_2015 = df[(df.CountryName == country) & (df.IndicatorCode == 'AG.LND.FRST.ZS') & (df.Year == 2015)].Value.values
if forest_area_1990.size > 0 and forest_area_2015.size > 0:
dff = dff.append({new_columns[0]:country, new_columns[1]: forest_area_2015[0] - forest_area_1990[0]}, ignore_index=True)
数据集如下所示:
CountryName CountryCode IndicatorName IndicatorCode Year Value
11531340 Canada CAN Forest area (% of land area) AG.LND.FRST.ZS 1990 38.299073
21041940 Canada CAN Forest area (% of land area) AG.LND.FRST.ZS 2015 38.166671
11777751 United States USA Forest area (% of land area) AG.LND.FRST.ZS 1990 33.022308
21288351 United States USA Forest area (% of land area) AG.LND.FRST.ZS 2015 33.899723
解决方案
我相信您正在寻找的是以下内容:
res = df[["CountryName", "Value"]].groupby("CountryName").agg(["first", "last"])
res.columns = ["first", "last"]
res["change"] = res["last"] - res["first"]
结果是:
first last change
CountryName
Canada 38.299073 38.166671 -0.132402
United States 33.022308 33.899723 0.877415
推荐阅读
- python - Django:对来自 SQL 的动态数据使用多项选择
- jupyter - 无法在 Google AI Platform 上使用 jupyter notebook 实例连接到 R 内核
- python - 如何在控制台(或终端)上的 python 中创建动画模式?
- tsql - 在 Visual Studio 中使用 TSQL 命令执行 SSIS 包
- javascript - 如何使用 jQuery 访问在 div 中定义的值
- android - Android清单为布局的特定部分启用RTL标志
- python - 使防火墙可以接受 python 代码
- reactjs - 当我安装包 react-simple-time 字段时,我收到错误:ERR!代码 ERESOLVE - 错误!ERESOLVE 无法解析依赖树
- node.js - 附加节点获取文件
- c - 删除包含相同对象的单独链接列表时避免双重 free() 错误