在 geopandas 上应用多个聚合函数
Applying multiple aggregation functions over geopandas
我在对 geopandas 地理数据帧中的溶解函数应用多个聚合函数时遇到了严重困难。
虽然该操作确实有效,但生成的地理数据框列的结构为单个元组。如果是pandasmultiIndex.from_tuples结构,我的分析就没有问题。由于只是一个Tuples的序列,聚合后无法正常操作geodataframe
这是一段代码,用来表达我的观点。
给定的 GeoDataFrame 包含如下几列:
['GEOCODE_4', 'Datetime', 'geometry', 'Precipitacao_1000m', 'COD_UF','COD_MUNIC', 'POP', 'POP_Esperada', 'HAV', 'Incidencia','Incidencia_10_3e', 'Year']
在我的研究案例中,我试图评估上述变量的聚合 "mean" 和 "sum"。就此而言,我使用地理数据框中的溶解功能,如下所示。
# Initial geodataframe (refered as GDF):
GDF_temporal_reduced = GDF.dissolve(by='GEOCODE_4', aggfunc=['sum', 'mean'])
应用溶解功能后,我最终得到一个 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 的方法吗?
感谢您的宝贵时间,
此致,
菲利普·里尔
pd.MultiIndex.from_tuples 应该适用于您的列结构,问题是 non-tuple 几何列。我想有一种方法可以在手动构建多索引时包含几何列,但为了简单起见,我只是放弃了它。如果您仍然需要,只需重新附加几何列即可。
df = df.drop('geometry', axis=1)
df.columns = pd.MultiIndex.from_tuples(df.columns)
df = df.swaplevel(axis=1)
比 dissolve 更好的办法是先在 pandas 中使用 groupby 函数,然后 assemble pandas
数据框架到一个新的 geopandas 数据框架。这样做的好处是
您可以为不同的列指定不同的聚合方法。让我们说总和
对于 Pop 和 Mean 对于 Prep
GDF_merged = gpd.GeoDataFrame(GDF.groupby('GEOCODE_4').agg({'geometry':'first',
'Pop': "sum",
'Prep':'mean' }).reset_index(),
geometry="geometry",
crs = GDF.crs
)
我在对 geopandas 地理数据帧中的溶解函数应用多个聚合函数时遇到了严重困难。
虽然该操作确实有效,但生成的地理数据框列的结构为单个元组。如果是pandasmultiIndex.from_tuples结构,我的分析就没有问题。由于只是一个Tuples的序列,聚合后无法正常操作geodataframe
这是一段代码,用来表达我的观点。
给定的 GeoDataFrame 包含如下几列:
['GEOCODE_4', 'Datetime', 'geometry', 'Precipitacao_1000m', 'COD_UF','COD_MUNIC', 'POP', 'POP_Esperada', 'HAV', 'Incidencia','Incidencia_10_3e', 'Year']
在我的研究案例中,我试图评估上述变量的聚合 "mean" 和 "sum"。就此而言,我使用地理数据框中的溶解功能,如下所示。
# Initial geodataframe (refered as GDF):
GDF_temporal_reduced = GDF.dissolve(by='GEOCODE_4', aggfunc=['sum', 'mean'])
应用溶解功能后,我最终得到一个 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 的方法吗?
感谢您的宝贵时间,
此致,
菲利普·里尔
pd.MultiIndex.from_tuples 应该适用于您的列结构,问题是 non-tuple 几何列。我想有一种方法可以在手动构建多索引时包含几何列,但为了简单起见,我只是放弃了它。如果您仍然需要,只需重新附加几何列即可。
df = df.drop('geometry', axis=1)
df.columns = pd.MultiIndex.from_tuples(df.columns)
df = df.swaplevel(axis=1)
比 dissolve 更好的办法是先在 pandas 中使用 groupby 函数,然后 assemble pandas 数据框架到一个新的 geopandas 数据框架。这样做的好处是 您可以为不同的列指定不同的聚合方法。让我们说总和 对于 Pop 和 Mean 对于 Prep
GDF_merged = gpd.GeoDataFrame(GDF.groupby('GEOCODE_4').agg({'geometry':'first',
'Pop': "sum",
'Prep':'mean' }).reset_index(),
geometry="geometry",
crs = GDF.crs
)