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

基于DataFrame某列批量计算多列值的for循环实现需求

解决方案

修正你的循环逻辑

你原代码的问题在于遍历df.iloc[:,3:10]时得到的是列名,而非列数据本身,所以不能用column.value()操作。正确的写法是通过列名获取对应列数据,再执行除法:

# 遍历第3到9列(0-based索引,对应iloc[:,3:10])的列名
for col in df.iloc[:, 3:10].columns:
    # 将当前列的值除以Population列,赋值回原列
    df[col] = df[col] / df['Population']

如果担心整数除法的问题(原列是int64),可以先将列转为float类型再计算:

for col in df.iloc[:, 3:10].columns:
    df[col] = df[col].astype(float) / df['Population']

封装为可复用函数

要处理多个DataFrame,直接把逻辑封装成函数即可,建议返回处理后的副本,避免修改原DataFrame:

def normalize_by_population(df):
    # 复制原DataFrame,避免原地修改
    processed_df = df.copy()
    # 获取需要处理的列范围
    target_cols = processed_df.iloc[:, 3:10].columns
    # 遍历处理每一列
    for col in target_cols:
        processed_df[col] = processed_df[col].astype(float) / processed_df['Population']
    return processed_df

额外注意事项

  • 如果Population列存在0值,会触发除以0的错误,可以用numpy处理这种情况(需要先导入import numpy as np):
    processed_df[col] = np.where(processed_df['Population'] == 0, 0, processed_df[col].astype(float) / processed_df['Population'])
    
  • 如果你不想覆盖原列,而是生成新的衍生列(比如加_per_capita后缀),可以修改赋值逻辑:
    processed_df[f"{col}_per_capita"] = processed_df[col].astype(float) / processed_df['Population']
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:12:22