从现有datafram创建多索引

2024-10-05 13:13:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我花了几个小时到处浏览,试图从熊猫的dataframe创建一个多索引。这是我拥有的数据框架(发布excel工作表模型)。我在pandas数据框中确实有这个:

have

这就是我想要的:

want

我试过了

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

但它返回的是数据帧,而不是多索引。另外,我也不知道如何将“用户id”设置为0级和“帐号”设置为1级。我想这一定很琐碎,但我读了这么多的帖子、教程等,还是想不出来。部分原因是因为我是一个非常直观的人,而大多数的帖子都不是。请帮忙!


Tags: 数据模型框架iddataframepandasindexaccount
3条回答

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

正如亚历山大所说

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

用一个可能的inplace=True来做这个工作。

type(df)给出

pandas.core.frame.DataFrame

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

pandas.core.indexes.multi.MultiIndex

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

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

您还应该能够简单地执行以下操作:

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

尽管您可能希望通过求和来避免任何重复(例如,两行或多行具有相同的user_idaccount_numdate值,但销售数字不同),这也是我建议使用groupby的原因。

如果需要多索引,只需通过new_df.index访问,其中new_df是从上述两个操作之一创建的新数据帧。

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

使用^{}

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

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

相关问题 更多 >

    热门问题