如何从多级列中删除第一级?
对于数据框:
tmp.head(1000).groupby(['user_id', 'aisle_id']).agg({'aisle_id': ['count']})
给
aisle_id
count
user_id aisle_id
382 38 1
84 2
115 1
3107 43 1
3321 37 1
69 2
我想将aisle_id
放入我的专栏中。如何通过链接命令而不必启动另一个语句来完成此操作?
答案 0 :(得分:3)
更改您的groupby语句。
tmp.head(1000).groupby(['user_id', 'aisle_id'])['aisle_id'].agg(['count'])
答案 1 :(得分:2)
您可以使用点运算符快速访问列multiindex的第一级。与您使用单级索引访问列的方式类似。
最后添加.aisle_id
。或等效['aisle_id']
tmp.head(1000).groupby(['user_id', 'aisle_id']).agg({'aisle_id': ['count']}) \
.aisle_id
count
user_id aisle_id
381 38 1
382 84 2
115 1
3107 43 1
3321 37 1
69 2
对评论的回应
@displayname这些是等效的df.aisle_id
和df.xs('aisle_id')
。我要指出的是,它将访问第一级为aisle_id
的所有列。如果你按照你的方式进行聚合,这将与ScottBoston的建议完全相同。不同之处在于,如果您希望将聚合结果存储到仅超过一列的变量中,则会保留这些结果,您只能使用aisle_id
访问df.aisle_id
。 ScottBoston解决方案的优势在于,当有一列可用时,我们将计算限制在aisle_id
之上。
答案 2 :(得分:1)
在级别0使用reset_index
,将drop设置为True
。
tmp.head(1000).groupby(['user_id', 'aisle_id']) \
.agg({'aisle_id': ['count']}).T.reset_index(level=0, drop=True).T