如何将Pandas DataFrame的分类列值转为新列生成目标宽表
解决方案
你需要的是Pandas的长表转宽表操作,直接用pivot方法即可实现需求,代码如下:
import pandas as pd # 你给出的原始df df = pd.DataFrame( {'Date': ['2015-02-24','2015-02-24','2015-02-25','2015-02-26'], 'Class': ['E','M','M','H'], 'Value':[100,200,200,300]}) # 核心转换代码 df1 = df.pivot(index='Date', columns='Class', values='Value').reset_index()
如果你的实际数据里存在同一日期、同一Class对应多个Value的情况,避免pivot报错可以用pivot_table指定聚合规则,示例如下:
# aggfunc可根据需求替换为'mean'/'max'/'min'等聚合函数 df1 = df.pivot_table(index='Date', columns='Class', values='Value', aggfunc='sum').reset_index()
参数说明
index:指定转换后作为行维度的列,这里填Datecolumns:指定要展开为新列的字段,这里填Class,它的唯一取值E、M、H会自动成为新列名values:指定填充到新表格单元格的数值来源列,这里填Valuereset_index():将作为行索引的Date还原为普通数据列,和你给出的预期输出格式完全匹配
转换后无匹配值的位置默认会填充为NaN,最终输出和你要求的一致。
内容的提问来源于stack exchange,提问作者Kath
相关产品推荐
相关产品推荐

