gpt4 book ai didi

python - 如何对 pandas 数据框子集中的列求和

转载 作者:太空宇宙 更新时间:2023-11-03 21:43:14 26 4
gpt4 key购买 nike

我对 Python 及其在 GIS 中的应用非常陌生。

使用 Jupyter 笔记本,我正在处理一个太大而无法用 Excel 打开的数据集。它有近 800000 行和 61 列。

现在,我需要查询数据帧以创建感兴趣的子集,在本例中为 2 列:OBJECTID 和 Landuse,每个列都达到特定范围:

import pandas
df = pd.read_csv('.big file.csv')
grass_ID4440 = df[(df.OBJECTID == 4440) & (df.Landuse == 'Grass - Urban')]

该子集输出 38 行。现在,如果我想对这 38 行的面积求和,我应该采用哪种逻辑/方法?

这是我的想法:

area_ID4440 = grass_ID4440['Area'].sum()

这在逻辑上显然是错误的,因为它输出的是整个数据集的 TOTAL 面积之和。

提前谢谢您!

最佳答案

你的逻辑应该工作得很好。但值得指出的是,您应该避免链式索引,explicitly discouraged尽可能在文档中。这消除了使用副本与 View 的歧义,同时也使您的逻辑更加清晰。

有几个选项:-

重用 bool 索引

一种常见的方法是计算 bool 掩码(昂贵的部分)并在后续计算中重用它:

mask = (df['OBJECTID'] == 4440) & (df['Landuse'] == 'Grass - Urban')
grass_ID4440 = df[mask] # this is a view based on df
area_ID4440 = df.loc[mask, 'Area'].sum() # scalar output

制作明确的副本

这样,对数据帧切片的任何更改都不会影响原始数据帧:

mask = (df['OBJECTID'] == 4440) & (df['Landuse'] == 'Grass - Urban')
grass_ID4440 = df[mask].copy() # this is a copy, changes will not be reflected in df
area_ID4440 = df.loc[mask, 'Area'].sum() # scalar output

关于python - 如何对 pandas 数据框子集中的列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52688765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com