首页 > 解决方案 > 在 geopandas 上应用多个聚合函数

问题描述

在 geopandas 地理数据框中应用多个聚合函数而不是溶解函数时,我面临着严重的困难。

尽管该操作确实有效,但生成的地理数据框列被结构化为单个元组。如果它是在 pandas multiIndex.from_tuples 结构中构建的,我的分析不会有问题。由于它只是一个元组序列,聚合操作后我无法正确操作地理数据框。

这是一个截断的代码,以便表达我的观点。

给定的 GeoDataFrame 包含如下几列:

['GEOCODE_4', 'Datetime', 'geometry', 'Precipitacao_1000m', 'COD_UF','COD_MUNIC', 'POP', 'POP_Esperada', 'HAV', 'Incidencia','Incidencia_10_3e', 'Year']

在我的研究案例中,我试图评估上述这些变量的聚合“平均值”和“总和”。为此,我使用地理数据框中的溶解功能,如下所示。


# Initial geodataframe (refered as GDF):

GDF_temporal_reduced = GDF.dissolve(by='GEOCODE_4', aggfunc=['sum', 'mean'])

应用溶解功能后,我最终得到一个地理数据框,其列结构为元组:


# GDF_temporal_reduced.columns 

    # returns the following index:

['geometry',  
('Precipitacao_1000m', 'sum'),     ('Precipitacao_1000m', 'mean'),
('COD_UF', 'sum'),                 ('COD_UF', 'mean'),
('COD_MUNIC', 'sum'),              ('COD_MUNIC', 'mean'),
('POP', 'sum'),                    ('POP', 'mean'),
('POP_Esperada', 'sum'),           ('POP_Esperada', 'mean'),  
('HAV', 'sum'),                    ('HAV', 'mean'),
('Incidencia', 'sum'),             ('Incidencia', 'mean'),
('Incidencia_10_3e', 'sum'),       ('Incidencia_10_3e', 'mean'),
('Year', 'sum'),                   ('Year', 'mean')] 

这是我的 GDF 的外观:

还原后的 GDF

一旦这些列现在是元组,而不是精确的多索引形式,我就无法在整个操作后正确过滤它们。

有谁知道如下获得减少 GDF 的方法?

所需减少的 GDF

我感谢你的时间,

您忠诚的,

菲利普·里尔

标签: python-3.xaggregationgeopandas

解决方案


pd.MultiIndex.from_tuples 应该与您的列结构一起使用,问题是非元组几何列。我想在手动构建多索引时有一种方法可以包含几何列,但为简单起见,我只是删除了它。如果您仍然需要它,只需重新附加几何列。

df = df.drop('geometry', axis=1)
df.columns = pd.MultiIndex.from_tuples(df.columns)
df = df.swaplevel(axis=1)

推荐阅读