Pandas问题:在列中重复列表操作失败
解决Pandas为多国家重复添加年份序列的问题
你的核心问题是生成的年份序列索引重复,导致赋值时无法和数据框索引对齐。以下是几种直接可行的方案:
方案1:用numpy.tile快速生成匹配序列
先生成1990-2019的年份列表,再用tile把整个年份序列重复189次(对应189个国家),直接赋值给df['year']:
import numpy as np import pandas as pd # 生成1990到2019的年份列表(共30个年份) year_list = list(range(1990, 2020)) # 把年份序列重复189次,刚好匹配5670行(189*30) df['year'] = np.tile(year_list, 189)
方案2:用列表推导式生成序列
如果不想依赖numpy,用纯Python列表推导式也能生成目标序列:
year_list = list(range(1990, 2020)) # 循环189次,每次输出完整的年份列表 df['year'] = [year for _ in range(189) for year in year_list]
为什么你的原代码报错?
你用years.repeat(30)生成的是每个年份重复30次的序列(比如1990出现30次,接着1991出现30次...),这和你需要的「每个国家对应完整年份序列」的顺序不符。更关键的是,这个序列的索引是原years的索引(0-29)重复30次,存在大量重复值;当你的数据框df索引也有重复时,Pandas无法确定重复索引的对应关系,因此触发ValueError: cannot reindex on an axis with duplicate labels。
内容的提问来源于stack exchange,提问作者S.H
相关产品推荐
相关产品推荐

