2つのインデックスレベルを持つデータフレームがあります。
value
Trial measurement
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
私はこれに変えたい:
Trial measurement value
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
どうすればこれを行うことができますか?
データを集約したいのでこれが必要です ここで説明したように ですが、インデックスとして使用されている場合、そのような列を選択することはできません。
reset_index()は、インデックス値を列としてDataFrameに転送するpandas DataFrameメソッドです。パラメータのデフォルト設定はdrop = False(インデックス値を列として保持します)です。
必要なことは、DataFrameの名前の後に.reset_index(inplace=True)
を追加するだけです:
df.reset_index(inplace=True)
これは実際にはあなたのケースには当てはまりませんが、他の人(5分前の私のような)が知るのに役立つかもしれません。 multindexの名前が次のように同じ場合:
value
Trial Trial
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
df.reset_index(inplace=True)
は失敗し、作成された列は名前を共有できません。
そのため、次を取得するには、df.index = df.index.set_names(['Trial', 'measurement'])
でmultindexの名前を変更する必要があります。
value
Trial measurement
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
そして、df.reset_index(inplace=True)
はチャームのように機能します。
live_date
というdatetime-column(indexではない)で年と月でグループ化すると、この問題が発生しました。つまり、年と月の両方がlive_date
という名前になりました。
コメントで@ cs95が言及したように、1つのレベルのみをドロップするには、次を使用します。
df.reset_index(level=[...])
これにより、リセット後に目的のインデックスを再定義する必要がなくなります。