将多个数据帧组合成多索引列的数据帧

时间:2021-03-12 11:54:56

标签: python python-3.x pandas dataframe multi-index

假设我有 3 个数据帧,

df_1 代表收入

Year        TSLA    MSFT     AVY
2019         851     200   112.8
2018         725     150    92.6

df_2 代表一些其他收入

Year        TSLA    MSFT     AVY
2019          10      13      17
2018          11      14      18

df_3 代表费用

Year        TSLA    MSFT     AVY
2019         110     213     317
2018         111     214     418

获得以下 df 的代码是什么?

       TSLA                             MSFT                             AVY
Year   revenues other_revenues expenses revenues other_revenues expenses revenues other_revenues expenses
2019        851             10      110      200             13      213    112.8             17      317
2018        725             11      111      150             14      214     92.6             18      418

多索引形式的列在哪里?

谢谢

1 个答案:

答案 0 :(得分:2)

使用 concatDataFrame.swaplevelDataFrame.sort_indexpublic object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var treeViewItems = (TreeViewItem) value; if (treeViewItems == null) return false; return treeViewItems.Items.Count != 0 && treeViewItems.Items.Cast<TreeViewItem>() .All(item => item.Foreground.Equal(Colors.Gray)); } 进行排序:

private bool CheckContainerVisibility(TreeViewItem container)
{
    var grayChild = 0;
    foreach (TreeViewItem item in container.Items)
        if (item.Foreground.Equal(_viewModel.HiddenColor))
            grayChild++;
        else if (!item.Items.IsEmpty)
            if (CheckContainerVisibility(item))
                grayChild++;

    if (container.Items.Count != grayChild) return false;
    container.Foreground = new SolidColorBrush(_viewModel.HiddenColor);
    return true;
}

编辑:对于像原始添加 DataFrame.reindexMultiIndex.from_product 来自 MultiIndex 的第一级的唯一值的顺序:

#if not Year is index first create it
L = [x.set_index('Year') for x in [df_1, df_2, df_3]]
df = (pd.concat(L, 
               axis=1, 
               keys=('evenues', 'other_revenues', 'expenses'))
        .swaplevel(1, 0, axis=1)
        .sort_index(axis=1))
print (df)
         AVY                            MSFT                            TSLA  \
     evenues expenses other_revenues evenues expenses other_revenues evenues   
Year                                                                           
2019   112.8      317             17     200      213             13     851   
2018    92.6      418             18     150      214             14     725   

                              
     expenses other_revenues  
Year                          
2019      110             10  
2018      111             11