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
相关产品推荐
相关产品推荐

