在geopandas地理数据框中,在将多个聚合函数应用于dissolve函数时,我面临着严重的困难。
尽管该操作确实起作用,但是生成的地理数据框列被结构化为单个元组。如果它以pandas multiIndex.from_tuples结构构建,则我的分析不会有问题。由于它只是一个元组序列,因此聚合操作后,我无法正确操作地理数据框。
这是一个简短的代码,以便介绍我的观点。
给定的GeoDataFrame包含几列,如下所示:
['GEOCODE_4', 'Datetime', 'geometry', 'Precipitacao_1000m', 'COD_UF','COD_MUNIC', 'POP', 'POP_Esperada', 'HAV', 'Incidencia','Incidencia_10_3e', 'Year']
在我的研究案例中,我试图评估上述那些变量的总“均值”和“总和”。为此,我使用地理数据框中的dissolve函数,如下所示。
# Initial geodataframe (refered as GDF):
GDF_temporal_reduced = GDF.dissolve(by='GEOCODE_4', aggfunc=['sum', 'mean'])
在应用了dissolve函数之后,我得到了一个Geodataframe,其列的结构为元组:
# 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外观:
一旦这些列现在位于Tuple中,而不是精确地以Multiindex形式出现,在整个操作之后,我将无法正确过滤它们。
有人知道一种降低GDF的方法吗?
感谢您的宝贵时间,
真诚的,
Philipe Leal
答案 0 :(得分:1)
pd.MultiIndex.from_tuples应该与您的列结构一起使用,问题是非元组几何列。我猜有一种在手动构建多索引时包括几何列的方法,但是为了简单起见,我只是删除了它。如果仍然需要,只需重新附加几何列。
df = df.drop('geometry', axis=1)
df.columns = pd.MultiIndex.from_tuples(df.columns)
df = df.swaplevel(axis=1)
答案 1 :(得分:-1)
比dissolve更好的方法是先在pandas中使用groupby函数,然后组装pandas 数据框架转换为新的 geopandas 数据框架。这样做的好处是 您可以为不同的列指定不同的聚合方法。让我们说总和 流行和平均准备
GDF_merged = gpd.GeoDataFrame(GDF.groupby('GEOCODE_4').agg({'geometry':'first',
'Pop': "sum",
'Prep':'mean' }).reset_index(),
geometry="geometry",
crs = GDF.crs
)