从现有数据框创建多索引

pui*_*ais 5 python multi-index dataframe pandas reindex

我现在花了数小时浏览各处,以尝试从pandas的数据框创建多索引。这是我拥有的数据框(发布excel工作表模型。我在pandas数据框中确实有此框):

有

这就是我想要的:

想

我试过了

newmulti = currentDataFrame.set_index(['user_id','account_num'])
Run Code Online (Sandbox Code Playgroud)

但是它返回一个数据框,而不是一个多索引。另外,我不知道如何将'user_id'级别设置为0,将'account_num'级别设置为1。我认为这一定是微不足道的,但是我已经阅读了很多文章,教程等,但仍然无法弄清楚。部分原因是我是一个非常视觉化的人,而大多数职位都不是。请帮忙!

Ale*_*der 7

groupby在这种情况下,您可以简单地使用它,当它沿请求的列对销售额进行求和时,它将自动创建多索引。

df.groupby(['user_id', 'account_num', 'dates']).sales.sum().to_frame()
Run Code Online (Sandbox Code Playgroud)

您还应该能够简单地做到这一点:

df.set_index(['user_id', 'account_num', 'dates'])
Run Code Online (Sandbox Code Playgroud)

尽管您可能希望通过将它们相加来避免任何重复(例如,两行或更多行具有相同user_idaccount_numdate值但销售数字不同),但这就是为什么我建议使用的原因groupby

如果您需要多索引,则可以简单地访问viat new_df.index,这new_df是通过上述两个操作之一创建的新数据框。

user_id将是0级,并account_num为1级。


Eul*_*sel 7

为了澄清未来的用户,我想添加以下内容:

正如亚历山大所说,

df.set_index(['user_id', 'account_num', 'dates'])
Run Code Online (Sandbox Code Playgroud)

可能可以inplace=True完成这项工作。

给予type(df)

pandas.core.frame.DataFrame
Run Code Online (Sandbox Code Playgroud)

而这type(df.index)确实是预期的

pandas.core.indexes.multi.MultiIndex
Run Code Online (Sandbox Code Playgroud)