如何遍历Pandas DataFrame多列批量计算并构建单行结果DataFrame
Pandas批量处理W8_前缀列的加权均值计算及统计量分析
先预先计算重复用到的统计量,减少重复计算(提升效率关键):
提前算出每个Benthic_Mo分组的SHAPE_Area总和,以及全局总面积Area_sum,这俩是所有W8_列计算的公共依赖。# 预计算分组面积总和与全局总面积 area_grouped = gdf.groupby('Benthic_Mo')['SHAPE_Area'].sum() Area_sum = gdf['SHAPE_Area'].sum() # 计算分组权重:每组面积占总面积的比例 weights = area_grouped / Area_sum筛选所有以
W8_开头的目标列:w8_cols = [col for col in gdf.columns if col.startswith('W8_')]批量计算每个W8_列的B1值:
遍历目标列,对每列计算分组均值,再和权重相乘后求和,结果存入字典备用。results = {} for col in w8_cols: col_group_mean = gdf.groupby('Benthic_Mo')[col].mean() b1_value = (weights * col_group_mean).sum() results[col] = [b1_value] # 用列表格式方便后续转单行DataFrame构建单行结果DataFrame并计算方差/标准差:
import pandas as pd # 转换为单行DataFrame result_df = pd.DataFrame(results) # 计算所有结果的方差和标准差 total_variance = result_df.iloc[0].var() total_std_dev = result_df.iloc[0].std() # 可选:把统计量追加到结果DataFrame中 result_df.loc['variance'] = total_variance result_df.loc['std_dev'] = total_std_dev
注意:预先计算权重的方式,避免了循环中重复调用groupby计算面积和,数据量越大,效率提升越明显。
内容的提问来源于stack exchange,提问作者domarom
相关产品推荐
相关产品推荐

