如何在不丢失任何数据的情况下正确地旋转数据框?
How to pivot a dataframe correctly without losing any data?
我有以下 DataFrame:
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
...
...
...
...
我想将 table 转换为以下格式:
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')
然而,这给我留下了一个“压扁的”table,看起来像这样:
我很困惑,因为很难解释这个问题并在网上找到可能的解决方案,所以我希望这里有人能理解我的最终目标。
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
我有以下 DataFrame:
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 |
... | ... | ... | ... |
我想将 table 转换为以下格式:
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')
然而,这给我留下了一个“压扁的”table,看起来像这样:
我很困惑,因为很难解释这个问题并在网上找到可能的解决方案,所以我希望这里有人能理解我的最终目标。
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