如何将Pandas DataFrame的Rating列拆分,每个值转为单独列?
Pandas实现将Rating列转换为多列
你可以通过透视表的方式实现这个需求,以下是两种常用方法:
方法1:使用pivot方法
pivot适合数据中每个(System name, Rating)组合唯一的场景,直接转换即可:
import pandas as pd # 原DataFrame创建代码 df = pd.DataFrame(data={ 'System name': ['system1', 'system1', 'system1', 'systemZ', 'systemZ', 'systemZ', 'systemY', 'systemY', 'systemY'], 'Rating': [1, 2, 3, 1, 2, 3, 1, 2, 3], 'Count': [12, 156, 16, 77, 56, 66, 99, 77, 99]}) # 执行转换 pivoted_df = df.pivot(index='System name', columns='Rating', values='Count').reset_index() # 移除列名的层级标签 pivoted_df.columns.name = None print(pivoted_df)
方法2:使用pivot_table方法
如果你的数据存在重复的(System name, Rating)组合,pivot_table更通用,可通过聚合函数处理重复值:
import pandas as pd # 原DataFrame创建代码 df = pd.DataFrame(data={ 'System name': ['system1', 'system1', 'system1', 'systemZ', 'systemZ', 'systemZ', 'systemY', 'systemY', 'systemY'], 'Rating': [1, 2, 3, 1, 2, 3, 1, 2, 3], 'Count': [12, 156, 16, 77, 56, 66, 99, 77, 99]}) # 执行转换,这里用sum聚合(无重复时不影响结果) pivoted_df = df.pivot_table(index='System name', columns='Rating', values='Count', aggfunc='sum').reset_index() pivoted_df.columns.name = None print(pivoted_df)
运行结果
两种方法都会输出如下表格:
| System name | 1 | 2 | 3 |
|---|---|---|---|
| system1 | 12 | 156 | 16 |
| systemZ | 77 | 56 | 66 |
| systemY | 99 | 77 | 99 |
内容的提问来源于stack exchange,提问作者Franck Dernoncourt
相关产品推荐
相关产品推荐

