You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame循环替代方案:植物学数据清洗与转置优化

优化方案:用map/reduce替代for循环实现可复用的植物学DataFrame统计函数

核心思路

结合pandas分组能力与map/reduce,把原for循环的重复逻辑抽象成通用函数,同时兼容列名变更、分组列与聚合列间存在其他列的场景。

优化后的代码

import pandas as pd
from functools import reduce

def stat_pl_optimized(df, group_col="Transect", agg_col="Exigence"):
    # 自动筛选需聚合的数值列(排除非数值列及聚合列本身)
    numeric_cols = list(filter(
        lambda col: df[col].dtype in ['int64', 'float64'] and col != agg_col,
        df.columns
    ))
    
    # 批量处理每个分组:聚合求和→转置→添加分组标识
    processed_groups = list(map(
        lambda group: group[1].groupby(agg_col)[numeric_cols].sum().T
                              .rename_axis(index=None)
                              .assign(**{group_col: group[0]}),
        df.groupby(group_col)
    ))
    
    # 合并所有分组结果
    return reduce(lambda df1, df2: pd.concat([df1, df2], ignore_index=True), processed_groups)

# 使用示例
# 读取Excel数据
df = pd.read_excel("植物学数据.xlsx")
# 自定义列名调用(示例:更换分组列和聚合列)
result = stat_pl_optimized(df, group_col="样带编号", agg_col="需求等级")
print(result)

代码说明

  1. 数值列自动筛选:用filter+lambda快速定位需聚合的数值列,无需手动指定列名,自动适配中间列存在的场景。
  2. 分组批量处理:用map遍历所有分组,一次性完成聚合、转置、添加分组标识操作,替代原for循环的重复代码。
  3. 结果合并:用reduce拼接所有分组的处理结果,逻辑更简洁,效率优于循环append。

适配场景

  • 列名变更:调用函数时传入新的group_col和agg_col参数即可,无需修改核心逻辑。
  • 多中间列:自动过滤非数值列,不管分组列与聚合列之间有多少其他列,都不影响统计逻辑。

内容的提问来源于stack exchange,提问作者ml_cen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:42:14