Я бы предпочел работать с простым индексом, разбивая эти ряды на два столбца:
import pandas as pd
from collections import namedtuple
s = pd.Series({'A': 1, 'B': 2},
pd.Index([u'A', u'B'],
name=u'submission_label'))
SingleExperimentStatistics = namedtuple('SingleExperimentStatistics',
['metric_name', 'z_score', 'average'])
res = SingleExperimentStatistics(
metric_name=None,
z_score=1.1826795129064109,
average=s,
)
df = pd.DataFrame([res, res])
df1 = df.loc[:, ['metric_name', 'z_score']]
df1['A'] = df['average'].apply(lambda x: x['A'])
df1['B'] = df['average'].apply(lambda x: x['B'])
print(df1)
metric_name z_score A B
0 None 1.18268 1 2
1 None 1.18268 1 2
Если вы действительно хотите мультииндекс, вы можете определить его на этом шаге:
index = pd.MultiIndex.from_tuples(zip(['metric_name', 'z_score', 'average', 'average'],
['' ,'', 'A', 'B']))
df1.columns = index
print(df1)
metric_name z_score average
A B
0 None 1.18268 1 2
1 None 1.18268 1 2