python - 重塑 Pandas DataFrame:将列切换为索引并将重复值切换为列
问题描述
我很难弄清楚如何重塑这个 DataFrame。抱歉问题的措辞,这个问题似乎有点具体。
我有几个国家的数据以及一列 6 个重复特征和记录这些数据的年份。它看起来像这样(减去一些特性和列):
Country Feature 2005 2006 2007 2008 2009
0 Afghanistan Age Dependency 99.0 99.5 100.0 100.2 100.1
1 Afghanistan Birth Rate 44.9 43.9 42.8 41.6 40.3
2 Afghanistan Death Rate 10.7 10.4 10.1 9.8 9.5
3 Albania Age Dependency 53.5 52.2 50.9 49.7 48.7
4 Albania Birth Rate 12.3 11.9 11.6 11.5 11.6
5 Albania Death Rate 5.95 6.13 6.32 6.51 6.68
在这种情况下似乎没有任何方法可以让 pivot_table() 工作,我很难找到我可以采取的其他步骤来让它看起来像我想要的那样:
Age Dependency Birth Rate Death Rate
Afghanistan 2005 99.0 44.9 10.7
2006 99.5 43.9 10.4
2007 100.0 42.8 10.1
2008 100.2 41.6 9.8
2009 100.1 40.3 9.5
Albania 2005 53.5 12.3 5.95
2006 52.2 11.9 6.13
2007 50.9 11.6 6.32
2008 49.7 11.5 6.51
2009 48.7 11.6 6.68
其中“特征”列的唯一值每个都成为一个列,而年份列每个都成为该国家/地区的 multiIndex 的一部分。任何帮助表示赞赏,谢谢!
编辑:我检查了“重复”,但我看不出这个问题与这个问题有何相同。如何将我的特征列中的重复值作为唯一列放置,同时移动年份以成为与国家/地区的多索引?对不起,如果我没有得到什么。
解决方案
melt
与 reshape byset_index
和一起使用unstack
:
df = (df.melt(['Country','Feature'], var_name='year')
.set_index(['Country','year','Feature'])['value']
.unstack())
print (df)
Feature Age Dependency Birth Rate Death Rate
Country year
Afghanistan 2005 99.0 44.9 10.70
2006 99.5 43.9 10.40
2007 100.0 42.8 10.10
2008 100.2 41.6 9.80
2009 100.1 40.3 9.50
Albania 2005 53.5 12.3 5.95
2006 52.2 11.9 6.13
2007 50.9 11.6 6.32
2008 49.7 11.5 6.51
2009 48.7 11.6 6.68
推荐阅读
- python - 部分字符串匹配字典键字符串
- javascript - 使用 Export Default { myNamedModule } - 然后在 React Native 中导入该命名模块?
- java - 无法将消息对象从 RabbitMQ 转换为 java 类
- gradle - 如何在gradle配置期间防止依赖解析
- javascript - foreach 是否保证每次在相同的数据集上都以相同的顺序循环?
- ruby - 访问 Json 对象导轨
- regex - Hive regexp_extract 返回 NULL
- r - R - 访问列名称的 XML 模式属性名称
- versionone - 当网络出现故障时,如何在 Continuum 中重新运行活动?
- python - 替换列表中的每个元素