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()