web-dev-qa-db-ja.com

既存のデータフレームから多重指数を作成する

パンダのデータフレームからマルチインデックスを作成するために、今ではどこでもブラウジングするのに何時間も費やしています。これは私が持っているデータフレームです(Excelシートのモックアップを投稿しています。これはpandasデータフレーム)にあります:

have

そしてこれが私が欲しいものです:

want

私が試してみました

newmulti = currentDataFrame.set_index(['user_id','account_num'])

ただし、マルチインデックスではなく、データフレームを返します。また、「user_id」をレベル0、「account_num」をレベル1にする方法がわかりませんでした。これは些細なことだと思いますが、たくさんの投稿やチュートリアルなどを読んだのに、まだわかりませんでした。私は非常に視覚的な人であり、ほとんどの投稿はそうではないという理由もあります。助けてください!

6
puifais

この場合、単純にgroupbyを使用できます。これにより、要求された列に沿って売上を合計すると、マルチインデックスが自動的に作成されます。

df.groupby(['user_id', 'account_num', 'dates']).sales.sum().to_frame()

また、これを簡単に実行できるはずです。

df.set_index(['user_id', 'account_num', 'dates'])

重複を避けたいと思うかもしれませんが(たとえば、user_idaccount_numdateの値が同じで、売上高が異なる2つ以上の行)、それらを合計することをお勧めします。 groupby

マルチインデックスが必要な場合は、viat new_df.indexにアクセスするだけです。ここで、new_dfは、上記の2つの操作のいずれかから作成された新しいデータフレームです。

そして、user_idはレベル0になり、account_numはレベル1になります。

8
Alexander

将来のユーザーを明確にするために、以下を追加したいと思います。

アレクサンダーが言ったように、

_df.set_index(['user_id', 'account_num', 'dates'])
_

可能性のある_inplace=True_で仕事をします。

type(df)

_pandas.core.frame.DataFrame
_

一方、type(df.index)は確かに期待されています

_pandas.core.indexes.multi.MultiIndex
_
3

pd.MultiIndex.from_arrays を使用します

lvl0 = currentDataFrame.user_id.values
lvl1 = currentDataFrame.account_num.values

midx = pd.MultiIndex.from_arrays([lvl0, lvl1], names=['level 0', 'level 1'])
2
piRSquared

currentDataFrame.set_index(['user_id','account_num'])によって返されるDataFrameのインデックスは、['user_id','account_num']に設定されています。

newmulti.indexはMultiIndexオブジェクトを返します。

0
Casey Van Buren