如何从多级列删除第一级?
对于数据框架:
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
放在我的列中。我该如何通过链接命令而不必启动另一个语句来做到这一点?
更改您的groupby语句。
tmp.head(1000).groupby(['user_id', 'aisle_id'])['aisle_id'].agg(['count'])
您可以使用点运算符快速访问列的第一级。类似于您使用单级索引访问列的方式。
最后添加.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
的列。如果您要按照自己的方式进行汇总,这将与斯科特博斯顿的建议相同。不同之处在于,如果您想将聚合的结果存储到一个仅超过一列的变量中,那么这些结果就可以保留,并且可以使用df.aisle_id
访问aisle_id
。Scottboston解决方案的优点是,当更多一列可用时,我们将计算限制为aisle_id
。
在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