在这种情况下,您可以简单地使用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
值,但销售额不同),通过求和来合并它们,这就是我建议使用groupby
的原因。
如果您需要多重索引,您可以通过访问new_df.index
来简单地访问它,其中new_df
是从上述任一操作中创建的新数据帧。
user_id
将成为级别0,而account_num
将成为级别1。
first
、last
或带有lambda函数的unique
之类的东西。 - Alexanderdf.set_index(['user_id', 'account_num', 'dates'])
使用可能的inplace=True
可以完成任务。
type(df)
给出
pandas.core.frame.DataFrame
type(df.index)
的返回结果与预期相符。
pandas.core.indexes.multi.MultiIndex
lvl0 = currentDataFrame.user_id.values
lvl1 = currentDataFrame.account_num.values
midx = pd.MultiIndex.from_arrays([lvl0, lvl1], names=['level 0', 'level 1'])
A B C D
0 nil one 1 NaN
1 bar one 5 5.0
2 foo two 3 8.0
3 bar three 2 1.0
4 foo two 4 2.0
5 bar two 6 NaN
1. 解决方法 1:
df.set_index('A', append = True, drop = False).reorder_levels(order = [1,0]).sort_index()
这将返回:
2. 解决方法 2:
df.set_index(['A', 'B']).sort_index()
currentDataFrame.set_index(['user_id','account_num'])
返回的DataFrame将其索引设置为['user_id','account_num']
newmulti.index
将返回MultiIndex对象。
newmulti = currentDataFrame.set_index(['user_id','account_num'])
然后 newmultiReal = newmulti.index
吗?你能否澄清一下呢?我对 Pandas 完全是新手。 - puifais