我有一个带有2个分组列和3个数字列的pandas DataFrame。 我将数据分组如下:
df = df.groupby(['date_week', 'uniqeid']).agg({
'completes':['sum', 'median', 'var', 'min', 'max']
,'dcount_visitors': ['sum', 'median', 'var', 'min', 'max']
,'dcount_visitor_groups': ['sum', 'median', 'var', 'min', 'max']
})
结果是预期的多级索引:
MultiIndex(levels=[['completes', 'dcount_visitors', 'dcount_subscriptions', 'dcount_visitor_groups', 'date_week'], ['sum', 'median', 'var', 'min', 'max', '']],
labels=[[4, 3, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2], [5, 5, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4]])
通常,我将这样的多索引展平:
df2 = df2.reset_index(drop=True)
但是,当我检查列时,我仍然得到一个多索引。
我试图在我的groupby函数中包括as_index=False
,但这也不起作用。
有趣的是,如果我仅使用1个数字列进行一次聚合,则此过程将按预期工作。
u = nunits.groupby(['account', 'week_date', 'accountid', 'full_account_name','SegmentName'], as_index=False).agg({'ConsumptionUnit': 'sum'})
Index(['account', 'week_date', 'accountid', 'full_account_name', 'SegmentName',
'ConsumptionUnit'],
dtype='object')
任何提示或建议将不胜感激。
答案 0 :(得分:1)
(意识到“接受”您自己的问题有点违背常规,但想节省人们回答已解决问题的时间)
@Efran:我做到了,它是2级多重索引。 @Bugbeeb:呼吁确定水平。标签上的5个让我失望。
我能够找到一个答案:从Pandas 0.24.0开始,您可以使用.to_flat_index
。
我一直在使用0.23.0,因此在该文档中找不到该选项。
如何使用此示例here
之后:df.columns = df.columns.to_flat_index()
生成的索引如下所示
Index([ 'date_week',
'TPID',
('completes', 'sum'),
('completes', 'median'),
('completes', 'var'),
('completes', 'min'),
('completes', 'max'),
('dcount_visitors_with_events', 'sum'),
('dcount_visitors_with_events', 'median'),
('dcount_visitors_with_events', 'var'),
('dcount_visitors_with_events', 'min'),
('dcount_visitors_with_events', 'max'),
('dcount_id_groups', 'sum'),
('dcount_id_groups', 'median'),
('dcount_id_groups', 'var'),
('dcount_id_groups', 'min'),
('dcount_id_groups', 'max')],
dtype='object')
希望这对其他人有所帮助,并感谢您的快速答复。 这个社区很棒!
答案 1 :(得分:0)
您需要以multi_index(0,1,2,3 ...)标识级别。并使用inplace = True而不是重新分配df