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

时间:2017-06-04 19:31:33

标签: python pandas

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

对于数据框:

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放入我的专栏中。如何通过链接命令而不必启动另一个语句来完成此操作?

3 个答案:

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