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

Python Pandas为已有DataFrame添加新列时数据全部重复如何解决

问题根因

该问题核心是未按year字段做索引对齐,直接赋值时Pandas默认按索引而非年份值做匹配:

  • 你生成的df_new默认是整数索引,分组求和得到的islam年度汇总结果如果未和df_new的year列做关联匹配,直接插入列时会触发值广播,导致所有行重复第一个计算结果。
修复方案

步骤1:生成1945~2010年间隔5年的df_new

无需循环,直接调用内置方法生成即可:

import pandas as pd
# range左闭右开,终止值设为2011可包含2010年
df_new = pd.DataFrame({'year': range(1945, 2011, 5)})

步骤2:计算年度islam总和

分组求和后将year从索引转为普通列,方便后续匹配:

islam_yearly = df.groupby('year', as_index=False)['islam'].sum().rename(columns={'islam':'islam_total'})

步骤3:按年份关联匹配,避免错位

使用merge方法按year字段关联,保证每个年份的计算结果对应正确行:

# left join保留df_new的所有年份,无数据的年份自动填充NaN
df_new = df_new.merge(islam_yearly, on='year', how='left')
# 可选:将空值替换为0
df_new['islam_total'] = df_new['islam_total'].fillna(0)
典型错误写法示例

以下写法会触发你遇到的重复值问题:

# 错误1:直接取第一个值全量赋值
islam_sum = df.groupby('year')['islam'].sum()
df_new['islam'] = islam_sum.iloc[0]

# 错误2:未对齐索引直接赋值,长度不匹配时触发广播
df_new['islam'] = islam_sum.values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:21:02