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

