【问题标题】:How to pivot a dataframe correctly without losing any data?如何正确旋转数据框而不丢失任何数据?
【发布时间】:2022-01-12 01:16:29
【问题描述】:

我有以下数据框:

model metric final_result score
Decision Tree F1 Pass 0.57346
Decision Tree accuracy Pass 0.76512
Decision Tree precision Pass 0.6346
Decision Tree recall Pass 0.66512
Decision Tree F1 Fail 0.57346
Decision Tree accuracy Fail 0.76512
Decision Tree precision Fail 0.6346
Decision Tree recall Fail 0.66512
RF F1 Pass 0.57346
RF accuracy Pass 0.76512
RF precision Pass 0.6346
RF recall Pass 0.66512
... ... ... ...

我想将表格转换为以下格式:

Decision Tree Random Forest
final_result metric
Pass accuracy 0.76512 0.76512
precision 0.6346 0.6346
recall 0.66512 0.66512
F1 0.57436 0.57346
Fail accuracy 0.76512 0.76512
precision 0.6346 0.6346
recall 0.66512 0.66512
F1 0.57436 0.57346
... ... ... ...

我尝试通过使用pivot_table 函数来做到这一点,如下所示:

pd.pivot_table(modelPerformance, values='score', index=['metric', 'Final Result'], columns='model')

但是,这给我留下了一个看起来像这样的“压扁”表:

我很困惑,因为很难解释这个问题并在网上找到可能的解决方案,所以我希望这里的人能理解我的最终目标。

【问题讨论】:

    标签: python pivot-table data-transform


    【解决方案1】:

    IIUC,使用pivot 而不是pivot_table

    >>> df.pivot(['final_result', 'metric'], 'model', 'score')
    
    model                   Decision Tree       RF
    final_result metric                           
    Fail         F1               0.57346      NaN
                 accuracy         0.76512      NaN
                 precision        0.63460      NaN
                 recall           0.66512      NaN
    Pass         F1               0.57346  0.57346
                 accuracy         0.76512  0.76512
                 precision        0.63460  0.63460
                 recall           0.66512  0.66512
    

    【讨论】:

    • 感谢您的快速回复。我已经尝试过上述方法(使用 pivot),但出现以下错误Index contains duplicate entries, cannot reshape
    • 当同一索引/列(单元格)有重复值时,您想做什么?计算平均值,得到第一个或最后一个值,其他?
    • 事实上,我认为您不想聚合值,因为您不想“丢失任何数据”
    • 我认为我的问题在于数据本身,我想保留我认为的第一个值。
    猜你喜欢
    • 1970-01-01
    • 2022-10-13
    • 2011-07-04
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多