2016-05-02 63 views
1

给定一个类型为str的熊猫系列,我想按照str.split的频率排序结果。按频率排序str系列

例如,给出的系列

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

我想获得

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

结果( 'ABC', 'GHI' 前 '高清' 来,因为他们有频率2而'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 abcghi具有相同的重量,因为它的不可预知的次序,他们将出现在最终的系列