Python 如何在数据框中创建多级标题?

Python 如何在数据框中创建多级标题?,python,pandas,dataframe,Python,Pandas,Dataframe,我想创建一个数据帧标题,如下所示: 作为初学者,我只能尝试以下方法: Final=pd.MultiIndex.from_product([['Before','After'],['Total', 'Time','Year'],['Day','Month']]) 如何创建标题?如有任何建议,将不胜感激。提前感谢。我认为这里的多索引有点复杂,因此可以创建传递给的元组。始终需要指定所有3个级别,因此对于Total,将使用空字符串: tuples = [('Before','Total',''),

我想创建一个数据帧标题,如下所示:

作为初学者,我只能尝试以下方法:

Final=pd.MultiIndex.from_product([['Before','After'],['Total', 'Time','Year'],['Day','Month']])

如何创建标题?如有任何建议,将不胜感激。提前感谢。

我认为这里的多索引有点复杂,因此可以创建传递给的元组。始终需要指定所有3个级别,因此对于Total,将使用空字符串:

tuples = [('Before','Total',''),
          ('Before','Time1','AM'),
          ('Before','Time1','PM'),
          ('Before','Year1','Day'),
          ('Before','Year1','Month'),
          ('After','Total',''),
          ('After','Time1','AM'),
          ('After','Time1','PM'),
          ('After','Year1','Day'),
          ('After','Year1','Month')]
           
Final=pd.MultiIndex.from_tuples(tuples)

df = pd.DataFrame(index=[1,2], columns=Final)
print (df)
  Before                        After                       
   Total Time1      Year1       Total Time1      Year1      
            AM   PM   Day Month          AM   PM   Day Month
1    NaN   NaN  NaN   NaN   NaN   NaN   NaN  NaN   NaN   NaN
2    NaN   NaN  NaN   NaN   NaN   NaN   NaN  NaN   NaN   NaN

我认为这里的多重索引有点复杂,所以可以创建传递给的元组。始终需要指定所有3个级别,因此对于Total,将使用空字符串:

tuples = [('Before','Total',''),
          ('Before','Time1','AM'),
          ('Before','Time1','PM'),
          ('Before','Year1','Day'),
          ('Before','Year1','Month'),
          ('After','Total',''),
          ('After','Time1','AM'),
          ('After','Time1','PM'),
          ('After','Year1','Day'),
          ('After','Year1','Month')]
           
Final=pd.MultiIndex.from_tuples(tuples)

df = pd.DataFrame(index=[1,2], columns=Final)
print (df)
  Before                        After                       
   Total Time1      Year1       Total Time1      Year1      
            AM   PM   Day Month          AM   PM   Day Month
1    NaN   NaN  NaN   NaN   NaN   NaN   NaN  NaN   NaN   NaN
2    NaN   NaN  NaN   NaN   NaN   NaN   NaN  NaN   NaN   NaN

这里有一个可能的解决办法。由于您有三个级别,因此需要添加三个列表,每个代码列表的索引表示级别中的一个元素

Final = pd.MultiIndex(levels=[['Before','After'],['Total', 'Time','Year'],['AM','PM','Day','Month','']],
               codes=[[0,0,0,0,0,1,1,1,1,1],
                      [0,1,1,2,2,0,1,1,2,2],
                      [4,0,1,2,3,4,0,1,2,3]])

pd.DataFrame(columns = Final)
输出:


这里有一个可能的解决办法。由于您有三个级别,因此需要添加三个列表,每个代码列表的索引表示级别中的一个元素

Final = pd.MultiIndex(levels=[['Before','After'],['Total', 'Time','Year'],['AM','PM','Day','Month','']],
               codes=[[0,0,0,0,0,1,1,1,1,1],
                      [0,1,1,2,2,0,1,1,2,2],
                      [4,0,1,2,3,4,0,1,2,3]])

pd.DataFrame(columns = Final)
输出: