Python 向现有数据帧添加一列重复编号

Python 向现有数据帧添加一列重复编号,python,Python,我有以下数据框,其中每一行都是唯一的州-市对: State City NY Albany NY NYC MA Boston MA Cambridge 我想添加一列从2000年到2018年的年份: State City. Year NY Albany 2000 NY Albany 2001 NY Albany 2002 ... NY Albany 2018 NY NYC 2000 NY

我有以下数据框,其中每一行都是唯一的州-市对:

State  City
NY     Albany
NY     NYC
MA     Boston
MA     Cambridge
我想添加一列从2000年到2018年的年份:

State  City.    Year
NY     Albany   2000
NY     Albany   2001
NY     Albany   2002
...
NY     Albany   2018
NY     NYC      2000
NY     NYC      2018
...
MA     Cambridge 2018
我知道我可以使用
Year=list(范围(20002019))

有人知道如何将此列表作为每个州/市的数据框中的一列吗?

您可以尝试将其添加为列表,然后执行explode。我认为它应该起作用:

df['Year'] = [list(range(2000,2019))] * len(df)
df = df.explode('Year')
一种方法是使用该方法

以下是您当前数据的示例:

data = [['NY',     'Albany'],
        ['NY',     'NYC'],
        ['MA',     'Boston'],
        ['MA',     'Cambridge']]
cities = pd.DataFrame(data, columns=['State', 'City'])
print(cities)

#   State       City
# 0    NY     Albany
# 1    NY        NYC
# 2    MA     Boston
# 3    MA  Cambridge
首先,将其转换为一个(这将在最终的数据帧中结束):

现在,制作一个包含所有年份的数据框(为了简洁起见,我只使用3年):

最后,使用stack将此数据帧转换为垂直堆叠的系列,我认为这正是您想要的:

years_by_city = years_data.stack().rename('Year')
print(years_by_city.head())

# State  City    Year index
# NY     Albany  0             2000
#                1             2001
#                2             2002
#        NYC     0             2000
#                1             2001
# Name: Year, dtype: int64
如果要删除索引并将所有值作为数据帧,只需执行以下操作

cities_and_years = years_by_city.reset_index()

谢谢你的建议!My
df
是唯一的州/市对。然后我尝试了上面的代码,得到了一个错误
值的长度与索引的长度不匹配
。我想这是因为我们在df中添加了一个18行的列,其中包含更多行?非常感谢!!它就像一个符咒。我真的很感谢你的帮助!!从来没有想过有一个叫爆炸的命令。
years_by_city = years_data.stack().rename('Year')
print(years_by_city.head())

# State  City    Year index
# NY     Albany  0             2000
#                1             2001
#                2             2002
#        NYC     0             2000
#                1             2001
# Name: Year, dtype: int64
cities_and_years = years_by_city.reset_index()