python - 在熊猫中将多行转换为一列
问题描述
我有一个看起来像这样的熊猫数据框:
指数 | ID | 年 | 代码 | 类型 | 价值 |
---|---|---|---|---|---|
0 | 100 | 2018 | 美国广播公司 | 1 | 123 |
1 | 100 | 2019 | 国防军 | 2 | 456 |
2 | 100 | 2019 | 全球健康指数 | 3 | 789 |
3 | 100 | 2018 | JKL | 4 | 454 |
4 | 100 | 2019 | 移动网络运营商 | 5 | 678 |
5 | 100 | 2018 | 二维码 | 6 | 234 |
6 | 101 | 2019 | 二维码 | 3 | 234 |
等等。我想将具有相同 ID 的所有行转换为一列及其各自的详细信息。总的来说,我有 1000 个ID
,7 个值Code
,8 个值Year
和 9 个值Type
。我尝试了相同的使用方法groupby
,pivot
但无法找到成功的解决方案。
我希望我的输出为:
指数 | ID | 第一年 | 代码1 | 类型1 | 价值1 | 第二年 | 代码2 | 类型2 | 价值2 |
---|---|---|---|---|---|---|---|---|---|
0 | 100 | 2018 | 美国广播公司 | 1 | 123 | 2019 | 国防军 | 2 | 456 |
以此类推,即在同一行中,针对 Year、Code、Type 和 Value 的不同值,与一个 ID 相关的所有条目。
这是我正在尝试做的事情:
df2['cc'] = (df2.groupby('ID').cumcount() + 1).astype(str)
df2 = df2.pivot(index=['ID'], columns='cc', values=["Year", "Code","Type", "Value])
df2.columns = ['_'.join(col) for col in df2.columns]
但我收到以下错误:
ValueError:传递值的形状为 (2578587, 4),索引暗示 (1, 4)
解决方案
推荐阅读
- angular - 如何将 DomSanitizer 作为打字稿中的参数传递给管道?
- typescript - 编辑动态添加的输入字段的值
- ruby - 清除开罗的当前路径
- cloud-foundry - 来自cli的PCF登录问题
- google-cloud-platform - 使用 gcsfuse 同步存储桶后性能下降
- angular - 如何使用 @angular/elements 扩展 HTMLButtonElement
- spring - 使用 Cassandra 自行引用的用户定义类型
- python-3.x - pythonTypeError:不能将序列乘以“列表”类型的非整数
- python - 没有列选项的熊猫合并
- spring-boot - 如何运行计划并缓存某些数据列表并在请求处理程序方法上使用 Cacheable?