Pandas:列中的重复列表不起作用

rta7y2nd  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(172)

我想从这个

转换一个 Dataframe
改为:

我花了一段时间才弄明白melt和transpose函数,从而得到这个结果

但我并没有设法将1990年到2019年的数据以重复的方式应用到189个国家中的每一个国家。
我试过:

year_list = []
for year in range(1990, 2020,1):
    year_list.append(year)
years = pd.Series(year_list)
years

然后

df['year'] = years.repeat(30)

(我需要重复30次,因为框架由5670行= 189个国家 * 29年组成)
我收到此错误消息:

ValueError: cannot reindex on an axis with duplicate labels

谷歌这个错误没有帮助。

brgchamk

brgchamk1#

一种办法可以是:

样本数据

import pandas as pd
import numpy as np

data = {'country': ['Afghanistan','Angola']}

data.update({k: np.random.rand() for k in range(1990,1993)})

df = pd.DataFrame(data)

print(df)

       country      1990      1991      1992
0  Afghanistan  0.103589  0.950523  0.323925
1       Angola  0.103589  0.950523  0.323925

代码

res = (df.set_index('country')
       .unstack()
       .sort_index(level=1)
       .reset_index(drop=False)
       .rename(columns={'country': 'geo', 
                        'level_0': 'time', 
                        0: 'hdi_human_development_index'})
       )

print(res)

   time          geo  hdi_human_development_index
0  1990  Afghanistan                     0.103589
1  1991  Afghanistan                     0.950523
2  1992  Afghanistan                     0.323925
3  1990       Angola                     0.103589
4  1991       Angola                     0.950523
5  1992       Angola                     0.323925

说明

  • 对列country使用df.set_index,并应用df.unstack将列名中的年份添加到索引中。
  • 现在,我们在level=1上使用df.sort_index来获取按字母顺序排列的国家。
  • 最后,我们使用df.reset_indexdrop参数设置为False)将索引作为列取回,并链接df.rename以定制列名。

相关问题