1
上の部分スライスを使用して、設定値Iは、次の空のデータフレーム生成コードのこのビット、持っている:私はするつもり何パンダ - マルチインデックス
>>> first = ['foo', 'bar']
>>> second = ['baz', 'can']
>>> third = ['ok', 'ko']
>>> colours = ['blue', 'yellow', 'green']
>>> idx = pd.IndexSlice
>>> ix = pd.MultiIndex.from_arrays(np.array([i for i in itertools.product(first, second, third)]).transpose().tolist(),
names=('first', 'second', 'third'))
>>> df1 = pd.DataFrame(index=ix, columns=colours).sort_index()
>>> print(df1)
blue yellow green
first second third
bar baz ko NaN NaN NaN
ok NaN NaN NaN
can ko NaN NaN NaN
ok NaN NaN NaN
foo baz ko NaN NaN NaN
ok NaN NaN NaN
can ko NaN NaN NaN
ok NaN NaN NaN
は、別のデータフレームからこのマルチインデックスベースの空のデータフレームを移入されましたそれは、(明確にするため切り捨て列)与えられ、これは次のように、列ベースです:
idx = pd.IndexSlice
for s in second:
for t in third:
for c in colours:
column_name = '{s}_{t}_{c}'.format(s=s, c=c, t=t)
values = df2[column_name]
df1.loc[idx[:, s, t], c] = values
:
baz_ok_blue baz_ko_blue can_ok_blue can_ko_blue baz_ok_yellow
foo -1.385111 -1.014812 -1.419643 1.540341 0.663933
bar 0.445372 -0.226087 0.450982 -1.114169 0.896522
は、これまでのところ私はこの方法をしようとしてきました
各繰り返しで、values
シリーズは正しく決定されますが、Pandasはvalues
のインデックスとdf1のマルチインデックスの第1レベルとが一致しません。結果として、すべてのdf1値はNaN
のままです。これは、PandasがMultiIndexを1つのインデックスと照合しようとしているためです。これの方法はありますか?
基本的には、より高いレベルのパースペクティブを得るために、df2(文字列ベース)をdf1(MultiIndexベース)の形式に再配置しようとしています。
おかげで、華麗な。しかし、いくつかの値は最後の段階で失われているようです(積み重ねてもまだそこに残っていますが、再インデックス後に消えてしまいます - ほとんどがNaNです) – Jivan
シミュレーションが可能ですか? – jezrael
実際には、 'second'と' colour'の列が同じラベルを持つことが原因で発生する可能性があります。 – Jivan