2017-04-21 14 views
5

Tôi có một dataframe gấu trúc như thế này:Kết hợp hàng để 'người khác' ở gấu trúc

character count 
0   a 104 
1   b  30 
2   c 210 
3   d  40 
4   e 189 
5   f  20 
6   g  10 

Tôi muốn chỉ có 3 nhân vật hàng đầu trong dataframe và số còn lại được kết hợp như others để bàn trở thành:

character count 
0   c 210 
1   e 189 
2   a 104 
3 others 100 

Làm cách nào để đạt được điều này?

Cảm ơn bạn.

+1

Nếu câu trả lời là hữu ích, đừng quên [chấp nhận] (http: //meta.stackexchange. com/a/5235/295067). – jezrael

Trả lời

6

chúng ta có thể sử dụng phương pháp Series.nlargest():

In [31]: new = df.nlargest(3, columns='count') 

In [32]: new = pd.concat(
    ...:   [new, 
    ...:   pd.DataFrame({'character':['others'], 
    ...:      'count':df.drop(new.index)['count'].sum()}) 
    ...:   ], ignore_index=True) 
    ...: 

In [33]: new 
Out[33]: 
    character count 
0   c 210 
1   e 189 
2   a 104 
3 others  60 

hoặc chút ít giải pháp thành ngữ:

In [16]: new = df.nlargest(3, columns='count') 

In [17]: new.loc[len(new)] = ['others', df.drop(new.index)['count'].sum()] 

In [18]: new 
Out[18]: 
    character count 
2   c 210 
4   e 189 
0   a 104 
3 others 100 
+2

Chỉ cần thêm 'new.reset_index (inplace = True, drop = True)' để khớp chính xác :) – zipa

+0

@zipa, vâng, cảm ơn bạn! Tôi sẽ cải thiện giải pháp của mình - tôi không thích nó – MaxU

+0

Cảm ơn bạn. Nó hoạt động tốt! –

Các vấn đề liên quan