我有以下数据.它有两个索引来选择行(样本和epochs)和2个索引来选择列(kpi和模型). 实现这一目标的代码是这样的: 我想重命名为最后的2列,并创建新的分组,从而改变: 为此 我如何实现这一点,同时保留原来的dataframe的结构? 我最终得到了这样的解决方案: 你可以试试droplevel方法:https://pandas.pydata.org/docs/viewce/api/pandas.multiindex.droplevel.html 应该这样做.

2022-10-15 12:55:39标签pandasdataframeindexingrename
提问

我有以下数据。它有两个索引来选择行(样本和epochs)和2个索引来选择列(kpi和模型)。 实现这一目标的代码是这样的: 我想重命名为最后的2列,并创建新的分组,从而改变: 为此 我如何实现这一点,同时保留原来的dataframe的结构? 我最终得到了这样的解决方案: 你可以试试droplevel方法:https://pandas。pydata。org/docs/viewce/api/pandas。multiindex。droplevel。html 应该这样做。

kpi            Accuracy             Precision            Recall             Training time (sec)                 Model memory (MB)               HE Memory (GB)         
model                M0    M1    M2        M0   M1   M2      M0    M1    M2                  M0      M1      M2                M0     M1     M2             M0       M1
samples epochs                                                                                                                                                         
675     3          0.96  0.52  1.00       1.0  0.0  1.0  0.9166  0.00  1.00              0.2124  0.2083  0.2080             0.417  0.417  0.417       0.553547   6.2009
        4          0.96  0.52  1.00       1.0  0.0  1.0  0.9166  0.00  1.00              0.2066  0.2123  0.2137             0.417  0.417  0.417       0.553547   6.2009
1950    3          0.98  0.96  0.98       1.0  1.0  1.0  0.9600  0.92  0.96              0.2132  0.2139  0.2136             0.417  0.417  0.417       1.664447  12.3319
        4          0.98  0.90  0.98       1.0  1.0  1.0  0.9600  0.80  0.96              0.2064  0.2166  0.2152             0.417  0.417  0.417       1.664447  12.3319

tuples = list(zip_longest(shape_ind, epoch_ind))
flat_list = flatten_list(kpi_values)
df = pd.DataFrame(np.reshape(flat_list, (len(kpi_values), -1)))
df.index = pd.MultiIndex.from_tuples(tuples, names=['samples', 'epochs'])
df.columns= pd.MultiIndex.from_arrays(np.divmod(df.columns, len(kpi_values[0][0])), names=['kpi','model'])
df.rename((lambda x: f'M{x}' ), 
        axis=1,
        level=1,
        inplace=True)
kpi = ['Accuracy', 'Precision', 'Recall', 'Training time (sec)', 'Model memory (MB)', 'HE Memory (GB)', 'HE gen. time (sec)']
df.rename(mapper=lambda x: kpi[x], 
        axis=1,
        level=0,
        inplace=True)
print(df)

HE Memory (GB)         
M0         M1                                                                                                                                                         
0.553547   6.2009
0.553547   6.2009
1.664447  12.3319
1.664447  12.3319

HE Memory (GB)  HE gen. time (sec)      
                                   <--- note how M0 and M1 are gone                                                                                                                                    
0.553547        6.2009
0.553547        6.2009
1.664447        12.3319
1.664447        12.3319

回答

model_kpi = ['ACC', 'PRC', 'REC', 'TR_T', 'MM']#, 'HE_M', 'HE_GEN_TIME']
he_kpi = ['HE_M', 'HE_GEN_T']
kpi = [ item for item in model_kpi for repetitions in range(len(kpi_values[0][0])) ] + he_kpi
model = ['M'+str(i) for i in range(len(kpi_values[0][0]))]*len(model_kpi) + ['',''] 
col_ind = list(zip(kpi, model))
row_ind = list(zip_longest(shape_ind, epoch_ind))
flat_list = flatten_list(kpi_values)
df = pd.DataFrame(np.reshape(flat_list, (len(kpi_values), -1)))
df.index = pd.MultiIndex.from_tuples(row_ind, names=['samples', 'epochs'])
df.columns = pd.MultiIndex.from_tuples(col_ind, names=['kpi', 'model'])
回答

df.droplevel(1) 

▼版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说cuoshuo.com——程序员的报错记录

部分内容根据CC版权协议转载,如果您希望取消转载请发送邮件到cuoshuo8@163.com

辽ICP备19011660号-5