首页 > 解决方案 > 在熊猫中将多行转换为一列

问题描述

我有一个看起来像这样的熊猫数据框:

指数 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。我尝试了相同的使用方法groupbypivot但无法找到成功的解决方案。

我希望我的输出为:

指数 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)

标签: pythonpandaspandas-groupby

解决方案


推荐阅读