我有大量的数据,需要验证,大致有以下简化形式:
program;param0;param1;param2;param3;param4;param5;WCET
bench1;P1;2;0;0;OFF;ALG1;23835
bench1;P1;4;4;0;OFF;ALG2;11520
bench2;P3;4;3;2;OFF;ALG1;2480450
bench2;P3;4;3;2;BB;ALG1;2480620
bench3;P2;6;2;2;BB;ALG3;2290
bench3;P2;4;4;0;OFF;ALG4;2490
我使用以下代码将其聚合到一个透视表中:
import numpy as np
import pandas as pd
def process_test_data():
raw = pd.read_csv("omitted", sep=";")
print("* benchmarks aggregated ")
benchmarks_aggregated = pd.pivot_table(raw,
values=['WCET'],
index=['program'],
columns=['param0', 'param1', 'param2', 'param3', 'param4', 'param5', ],
aggfunc={'WCET': [min, max]})
print(benchmarks_aggregated)
这给了我以下输出
WCET ...
max ... min
param0 P1 ... P3
param1 2 4 ... 6
param2 0 3 ... 2
param3 0 0 ... 2
param4 OFF BB ... OFF
param5 ALG1 ALG1 ALG2 ... ALG3 ALG4 ALG5
program ...
bench1 23835.0 13460.0* 13610.0* ... 8085.0 8280.0 10015.0
bench2 7439895.0 3777375.0 3682345.0 ... 2480085.0 2480350.0 3182175.0
bench3 6480.0 4050.0 4160.0 ... 2220.0 2340.0 3050.0
然而,对于进一步的健全性检查,我需要一个转换的表示,在这里我可以比较每个不同参数集的ALG[X]值。例如,我需要知道ALG2的最大WCET是否总是大于ALG1,而所有其他参数都是相同的(用*标记的具体示例)
我如何转换我的表以便得到以下结构?我试着去堆叠和转换,但那没有给我正确的行和列索引集。我相信有办法。对不起,我遗漏了一些明显的东西
* WCETmaxTable
ALG1 ALG2 ALG3
0 ... ... ...
1 ... ... ...
...
n ... ... ...
为了完整起见,我发布了我后来发现的解决方案:
这首先将行索引转换为列,然后将所有列级别转换为索引,然后仅将
param5
再次解列回列。要简化问题示例中的多索引,请在后面用范围计数器替换索引相关问题 更多 >
编程相关推荐