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

Python Pandas向已有DataFrame新增列时数值全部重复如何解决

问题根因

你遇到的问题是Pandas的索引对齐机制导致的:

  • 你通过循环append生成df_new时,每次新增的行都是从索引0开始的新DataFrame,最终df_new所有行的索引都是0
  • 分组求和得到的a的索引是0~13的连续整数,插入列时Pandas会按行索引匹配取值,导致df_new所有行都取到了a中索引为0的islam值,所以全列数值相同
    另外注意你贴的df_new结构列名为years,但生成代码里写的列名是year,需要先统一列名避免匹配错误。

优化+解决方法

第一步:优化df_new生成方式(可选,建议修改)

循环append性能极低,直接一行代码生成即可,天然避免索引异常问题:

import pandas as pd
df_new = pd.DataFrame({'year': range(1945, 2011, 5)})

第二步:匹配islam数值

推荐用merge方法,不受年份顺序影响,匹配最稳妥:

# 先计算每年islam的求和值
yearly_islam = df.groupby('year', as_index=False)['islam'].sum()
# 按year列关联两个表,自动匹配对应数值
df_new = df_new.merge(yearly_islam, on='year', how='left')

如果不想用merge,也可以重置索引后直接赋值:

# 重置df_new的索引,删除原来的全0旧索引
df_new = df_new.reset_index(drop=True)
# 转成列表赋值,跳过索引对齐逻辑
df_new['islam'] = df.groupby('year')['islam'].sum().tolist()

注意事项

如果最终islam列出现空值,说明原df中缺少对应年份的数据,可检查原df的year列是否覆盖了1945-2010所有间隔5年的取值。

内容的提问来源于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 06:36:03