2017-04-21 3 views
5

Ich habe einen Pandas Datenrahmen wie diese Kombination:Reihen zu ‚anderen‘ in Pandas

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

ich nur die Top-3-Zeichen in den Datenrahmen und die restlichen werden kombiniert, wie others so Tabelle werden haben wollen:

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

Wie kann ich das erreichen?

Vielen Dank.

+1

Wenn Antwort hilfreich war, vergessen Sie nicht [akzeptieren] (http: //meta.stackexchange. com/a/5235/295067) es. – jezrael

Antwort

6

wir Series.nlargest() Methode verwenden können:

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 

oder etwas weniger idiomatische Lösung:

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

Fügen Sie einfach 'new.reset_index (inplace = True, drop = True)' 'hinzu, um eine genaue Übereinstimmung zu erhalten :) – zipa

+0

@zipa, yeah, thank you! Ich werde meine Lösung verbessern - ich mag es nicht – MaxU

+0

Danke. Es läuft gut! –

Verwandte Themen