2

編集: ここで私の答えを見つけました: Building a hierarchyally indexed DataFrame from existing DataFrames

より高いレベルが修正された、一致する MultiIndex を作成する必要があることがわかりました

オリジナル:

告白しますが、まだマージと結合を理解していませんが、それらが私が望むものかどうかはわかりません。

単一のインデックスを持つ DataFrame と、MultiIndex を持つ DataFrame があり、その最後のレベルは単一インデックスの DataFrame と同じです。

次のコンテンツをコピー/移植しようとしています:

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: import itertools

In [4]: 

In [4]: inner = ('a','b')

In [5]: outer = ((10,20), (1,2))

In [6]: cols = ('one','two','three','four')

In [7]: 

In [7]: sngl = pd.DataFrame(np.random.randn(2,4), index=inner, columns=cols)

In [8]: 

In [8]: index_tups = list(itertools.product(*(outer + (inner,))))

In [9]: index_mult = pd.MultiIndex.from_tuples(index_tups)

In [10]: mult = pd.DataFrame(index=index_mult, columns=cols)

In [11]: 

In [11]: sngl
Out[11]: 
        one       two     three      four
a  2.946876 -0.751171  2.306766  0.323146
b  0.192558  0.928031  1.230475 -0.256739

In [12]: mult
Out[12]: 
        one  two three four
10 1 a  NaN  NaN   NaN  NaN
     b  NaN  NaN   NaN  NaN
   2 a  NaN  NaN   NaN  NaN
     b  NaN  NaN   NaN  NaN
20 1 a  NaN  NaN   NaN  NaN
     b  NaN  NaN   NaN  NaN
   2 a  NaN  NaN   NaN  NaN
     b  NaN  NaN   NaN  NaN

In [13]: 

In [13]: mult.ix[(10,1)] = sngl

In [14]: 

In [14]: mult
Out[14]: 
        one  two three four
10 1 a  NaN  NaN   NaN  NaN
     b  NaN  NaN   NaN  NaN
   2 a  NaN  NaN   NaN  NaN
     b  NaN  NaN   NaN  NaN
20 1 a  NaN  NaN   NaN  NaN
     b  NaN  NaN   NaN  NaN
   2 a  NaN  NaN   NaN  NaN
     b  NaN  NaN   NaN  NaN

In [15]: 

私は何を間違っていますか?

編集:インデックスごとにインデックスを作成すると機能しますが、それはパンダのやり方ではありません。

In [15]: mult.ix[(10,1,'a')] = sngl.ix['a']

In [16]: mult
Out[16]: 
             one        two     three       four
10 1 a  2.946876 -0.7511706  2.306766  0.3231457
     b       NaN        NaN       NaN        NaN
   2 a       NaN        NaN       NaN        NaN
     b       NaN        NaN       NaN        NaN
20 1 a       NaN        NaN       NaN        NaN
     b       NaN        NaN       NaN        NaN
   2 a       NaN        NaN       NaN        NaN
     b       NaN        NaN       NaN        NaN
4

1 に答える 1