2016-05-02 5 views
1

str型のPandas Seriesが与えられているので、str.splitによって返された結果を頻度でソートしたいと思います。周波数別にstr系列をソート

例えば、シリーズ

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

与えられた私は、結果として

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

を取得したいと思いますが( 'ABC'、 'GHI' 彼らは周波数2を持っているので、 'DEF' の前に来ます一方、「def」は頻度1を持つ)。

基本的に、私はPandas sort list of str.split()の組み合わせを求めていますPandas count frequencies within str series

私はこれをどのように行うことができますか?

答えて

1

はこの試してみてください。

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 

説明:

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とそのために彼らは結果として連続して表示されます、それは予測不可能だというのためghiは、同じ重みを持つ