如何通过链接从多级列删除第一级



如何从多级列删除第一级?

对于数据框架:

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_iddf.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

最新更新