2017-06-04 78 views
4

如何從多級別列中刪除第一級別?如何通過鏈接從多級別列中刪除第一級別?

對於數據幀:

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

更改您的groupby語句。

tmp.head(1000).groupby(['user_id', 'aisle_id'])['aisle_id'].agg(['count']) 
+0

確實比較短。我不知道我可以在'DataFrameGroupBy'對象上使用'[]''。 – displayname

2

您可以快速訪問欄的第一級多指標用點操作。與您如何訪問具有單個級別索引的列類似。

只是在末尾添加.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_idaisle_id的變量。 ScottBoston的解決方案的優點是,當一個以上的列是可用的,我們限制的計算,剛剛超過aisle_id

+0

如果只有一個列好的解決方案。如果有另一個「平均值」列,例如那麼我就必須得到Scotts版我猜。 – displayname

+0

謝謝你指出。我沒有意識到這一點! – displayname

+1

我們都學到了一些東西。 –

1

在與降設置爲0 True使用水平reset_index

tmp.head(1000).groupby(['user_id', 'aisle_id']) \ 
    .agg({'aisle_id': ['count']}).T.reset_index(level=0, drop=True).T 
+0

工作。雖然我不得不轉置它額外2次,而是降低0級。 – displayname