2016-05-02 6 views
1

Bei einer Pandas-Serie vom Typ str möchte ich das von str.split zurückgegebene Ergebnis nach ihrer Häufigkeit sortieren.Sortieren von Str-Serien nach Häufigkeit

Zum Beispiel angesichts der Serie

s = pd.Series(['abc,def,ghi','ghi,abc']) 

Ich möchte

s2 = pd.Series(['abc,ghi,def','abc,ghi']) 

als Ergebnis erhalten ('abc', 'ghi' kommen vor 'def', weil sie Frequenz haben 2 während "def" Häufigkeit hat 1).

Im Grunde bin ich für eine Kombination von Pandas sort list of str.split() fragen und Pandas count frequencies within str series

Wie kann ich das tun?

Antwort

1

versuchen Sie dies:

In [71]: freq = pd.Series(s.str.split(',').sum()).value_counts() 

In [72]: s.str.split(',').apply(lambda x: ','.join(sorted(x, key=freq.get, reverse=True))) 
Out[72]: 
0 abc,ghi,def 
1  ghi,abc 
dtype: object 

Erläuterung:

In [73]: freq 
Out[73]: 
ghi 2 
abc 2 
def 1 
dtype: int64 

In [75]: sorted(['abc','def','ghi'], key=freq.get, reverse=True) 
Out[75]: ['abc', 'ghi', 'def'] 

PS abc und ghi haben das gleiche Gewicht, weil der, dass sie in welcher Reihenfolge unberechenbar ist sie in der resultierenden Serie erscheint