2016-11-02 27 views
2

私は3つのレベルを持つDataFramesを作成したいと思います。次の機能が2回動作しないのはなぜですか?Pythonのパンダで、なぜマルチインデックスにレベルを追加できないのですか?

def superGroup(dataframe=None,multi_index_name=None): 
    out_dataframe = pd.DataFrame(dataframe.values,index=dataframe.index,columns=pd.MultiIndex.from_product([[multi_index_name],dataframe.columns])) 
    return out_dataframe 

ran = pd.DataFrame(np.random.rand(3),columns=["Random"]) 
ran2 = superGroup(ran,"Hello") 
superGroup(ran2,"World")#Does not work 
>>>[Out]: NotImplementedError: isnull is not defined for MultiIndex 
+1

これは0.18.1で動作します。どのバージョンのパンダを使用していますか? –

+0

私も0.18.1を使用しています。だから、 'superGroup(ran2、" World ")'を実行したときにエラーは発生しませんか? –

+0

私は0.19.0にアップグレードしようとしましたが、同じエラーが発生します。私はそれが何か違いがあれば、Windows用のアナコンダの最新のディストリビューションでジュピターのノートブックでこのコマンドを使用しようとしています。 –

答えて

1

ここでは、この問題をあまりにも多くの時間を費やした後にわかった解決策です。同じ問題を抱えている人たちを助けることを願っています。

def superGroup(dataframe=None,new_level=None): 
    """Returns a dataframe entered but multiindexed with name new level. 

    Parameters 
    ---------- 
    dataframe : DataFrame 
    new_level : str 

    Returns 
    ------- 
    out_df : DataFrame 

    """ 
    if type(dataframe.columns) == pd.indexes.base.Index: 
     out_df = pd.DataFrame(dataframe.values,index=dataframe.index,columns=pd.MultiIndex.from_product([[new_level],dataframe.columns])) 
     return out_df 
    if type(dataframe.columns) == pd.indexes.multi.MultiIndex: 
     levels = [list(i.values) for i in dataframe.columns.levels] 
     levels = [[new_level]]+levels 
     out_df = pd.DataFrame(dataframe.values, index = dataframe.index, columns = pd.MultiIndex.from_product(levels)) 
     return out_df