给定一个类型为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
的组合我该怎么做?
答案 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 abc
和ghi
具有相同的权重,因为它不可预测它们将出现在结果系列中的顺序