组合单索引和多索引数据帧而无需多索引单索引数据帧的方法

时间:2020-04-03 11:00:15

标签: python pandas dataframe

是否有一种干净简单的方法来组合多索引和单索引数据帧?

有些问题问类似的herehere,但是它们都比较老,并且具有“混乱”的解决方案。

我只有一个索引数据源:

df1 = pd.DataFrame({'single': [10,11,12], 'double': [7,8,9]})

   single  double
0      10       7
1      11       8
2      12       9

我希望将其组合到一系列具有空列的多索引数据帧中,这些空列具有不同的列和子列索引:

df2 = pd.DataFrame(columns = pd.MultiIndex.from_product([['happy'], ['very', 'not_much']]))    
Empty DataFrame
    Columns: [(happy, very), (happy, not_much)]
    Index: []

接下来,我将其添加到上述两个数据框的组合中,依此类推:

df3 =pd.DataFrame(columns = pd.MultiIndex.from_product([['sad'], ['always', 'never']]))
    Empty DataFrame
    Columns: [(sad, always), (sad, never)]
    Index: []

我尝试了追加和连接,但是都遇到了错误:

TypeError: Expected tuple, got str

最终目标是获得一个看起来像这样的数据框:

                     happy              sad  
 single   double  very  not_much  always  never
    0      10       7
    1      11       8
    2      12       9

1 个答案:

答案 0 :(得分:1)

我只使用concat然后对列进行后处理:

resul = pd.concat([df1, df2, df3], axis=1, sort=False)
resul.columns = pd.MultiIndex.from_tuples(
    [('', i) if isinstance(i, str) else i for i in resul.columns])

它给出了预期的结果:

                happy             sad      
  single double  very not_much always never
0     10      7   NaN      NaN    NaN   NaN
1     11      8   NaN      NaN    NaN   NaN
2     12      9   NaN      NaN    NaN   NaN
相关问题