パンダのデータフレームからマルチインデックスを作成するために、今ではどこでもブラウジングするのに何時間も費やしています。これは私が持っているデータフレームです(Excelシートのモックアップを投稿しています。これはpandasデータフレーム)にあります:
そしてこれが私が欲しいものです:
私が試してみました
newmulti = currentDataFrame.set_index(['user_id','account_num'])
ただし、マルチインデックスではなく、データフレームを返します。また、「user_id」をレベル0、「account_num」をレベル1にする方法がわかりませんでした。これは些細なことだと思いますが、たくさんの投稿やチュートリアルなどを読んだのに、まだわかりませんでした。私は非常に視覚的な人であり、ほとんどの投稿はそうではないという理由もあります。助けてください!
この場合、単純にgroupby
を使用できます。これにより、要求された列に沿って売上を合計すると、マルチインデックスが自動的に作成されます。
df.groupby(['user_id', 'account_num', 'dates']).sales.sum().to_frame()
また、これを簡単に実行できるはずです。
df.set_index(['user_id', 'account_num', 'dates'])
重複を避けたいと思うかもしれませんが(たとえば、user_id
、account_num
、date
の値が同じで、売上高が異なる2つ以上の行)、それらを合計することをお勧めします。 groupby
。
マルチインデックスが必要な場合は、viat new_df.index
にアクセスするだけです。ここで、new_df
は、上記の2つの操作のいずれかから作成された新しいデータフレームです。
そして、user_id
はレベル0になり、account_num
はレベル1になります。
将来のユーザーを明確にするために、以下を追加したいと思います。
アレクサンダーが言ったように、
_df.set_index(['user_id', 'account_num', 'dates'])
_
可能性のある_inplace=True
_で仕事をします。
type(df)
は
_pandas.core.frame.DataFrame
_
一方、type(df.index)
は確かに期待されています
_pandas.core.indexes.multi.MultiIndex
_
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'])
currentDataFrame.set_index(['user_id','account_num'])
によって返されるDataFrameのインデックスは、['user_id','account_num']
に設定されています。
newmulti.index
はMultiIndexオブジェクトを返します。