按频率对str系列进行排序

时间:2016-05-02 17:58:42

标签: python string pandas

给定一个类型为str的Pandas系列,我想按照它们的频率对str.split返回的结果进行排序。

例如,给定系列

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

我想得到

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

结果('abc','ghi'在'def'之前,因为它们的频率为2,而'def'的频率为1)。

基本上,我要求Pandas sort list of str.split()Pandas count frequencies within str series

的组合

我该怎么做?

1 个答案:

答案 0 :(得分: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具有相同的权重,因为它不可预测它们将出现在结果系列中的顺序