複数のインデックスが付いたDataFrame
の名前を列レベルに添付しています。私は、彼らがユーザーが指定した順序に一致するように、周りの列を簡単にシャッフルすることができるようにしたいと思います。これはパイプラインがダウンしているので、私はthis recommended solutionを使用することができず、作成時にそれらを正しく注文することができません。特定のレベルで複数インデックスのデータフレーム列を並べ替える方法
私は['IWWGCW', 'IWWGDW', 'BASE']
のようなリストに取ると、あることをこの順序を変更したい
Experiment BASE IWWGCW IWWGDW
Lead Time 24 48 24 48 24 48
2010-11-27 12:00:00 0.997 0.991 0.998 0.990 0.998 0.990
2010-11-28 12:00:00 0.998 0.987 0.997 0.990 0.997 0.990
2010-11-29 12:00:00 0.997 0.992 0.997 0.992 0.997 0.992
2010-11-30 12:00:00 0.997 0.987 0.997 0.987 0.997 0.987
2010-12-01 12:00:00 0.996 0.986 0.996 0.986 0.996 0.986
のように(何か)に見えるデータテーブルがあります:私ドンという警告で
Experiment IWWGCW IWWGDW BASE
Lead Time 24 48 24 48 24 48
2010-11-27 12:00:00 0.998 0.990 0.998 0.990 0.997 0.991
2010-11-28 12:00:00 0.997 0.990 0.997 0.990 0.998 0.987
2010-11-29 12:00:00 0.997 0.992 0.997 0.992 0.997 0.992
2010-11-30 12:00:00 0.997 0.987 0.997 0.987 0.997 0.987
2010-12-01 12:00:00 0.996 0.986 0.996 0.986 0.996 0.986
を「実験」のレベルはいつも分かりません。 (df
は、上に示したマルチインデックス付きフレームです)私は
df2 = df.reindex_axis(['IWWGCW', 'IWWGDW', 'BASE'], axis=1, level='Experiment')
を試してみましたが、それは動作していないようでした - それが正常に完了しましたが、返されたデータフレームはそのままその列の順序を持っていました。 reorder_columns(df, 'Experiment', ['IWWGCW', 'IWWGDW', 'BASE'])
は、私が何を期待しますが、私は余分な作業をやっているようにそれは感じている
def reorder_columns(frame, column_name, new_order):
"""Shuffle the specified columns of the frame to match new_order."""
index_level = frame.columns.names.index(column_name)
new_position = lambda t: new_order.index(t[index_level])
new_index = sorted(frame.columns, key=new_position)
new_frame = frame.reindex_axis(new_index, axis=1)
return new_frame
:
私の問題を回避するには、のような機能を持つことです。これを行う簡単な方法はありますか?
が、これは持っているようです – MERose
これは構文です: 'df.reindex(['top'、 'mid'、 'btm']、level = 'first')' https://github.com/pandas-dev/pandas/pull/9019 –