获取 pandas 系列中文档频率最高的前 100 个词
Getting top 100 words with highest document frequency in a pandas series
假设我有一个像这样的 pandas 系列:
0 "sun moon earth moon"
1 "sun saturn mercury saturn"
2 "sun earth mars"
3 "sun earth saturn sun saturn"
我想获得最高行 ("document") 频率的前 3 个单词 与单行 ("document") 中的频率无关 .
对于整体频率,我可以只收集字符串中所有行的所有单词,进行拆分,转换回系列并使用 value_counts
。在那种情况下,前 3 个频率将是:
1. sun: 5
2. saturn: 4
3. earth: 3
但是文档频率,即单词出现的行数,将是
1. sun: 4
2. earth: 3
3. saturn: 2
我能想到的一种方法是对系列应用 lambda 函数,拆分每个字符串,从中创建一个集合,然后将所有单词组合成一个集合,制作一个系列然后使用 value_counts
。有没有更有效的方法来实现同样的事情?
因为性能很重要 Counter
:
from collections import Counter
a = Counter([y for x in s for y in x.split()]).most_common(3)
print (a)
[('sun', 5), ('saturn', 4), ('earth', 3)]
b = Counter([y for x in s for y in set(x.split())]).most_common(3)
print (b)
[('sun', 4), ('earth', 3), ('saturn', 2)]
df1 = pd.DataFrame(a, columns=['val','count'])
#df2 = pd.DataFrame(b, columns=['val','count'])
print (df1)
val count
0 sun 5
1 saturn 4
2 earth 3
Pandas 备选方案:
a = s.str.split(expand=True).stack().value_counts().head(3)
print (a)
sun 5
saturn 4
earth 3
dtype: int64
b = (s.str.split(expand=True)
.stack()
.reset_index(name='val')
.drop_duplicates(['val', 'level_0'])['val']
.value_counts()
.head(3))
print (b)
sun 4
earth 3
saturn 2
Name: val, dtype: int64
假设我有一个像这样的 pandas 系列:
0 "sun moon earth moon"
1 "sun saturn mercury saturn"
2 "sun earth mars"
3 "sun earth saturn sun saturn"
我想获得最高行 ("document") 频率的前 3 个单词 与单行 ("document") 中的频率无关 .
对于整体频率,我可以只收集字符串中所有行的所有单词,进行拆分,转换回系列并使用 value_counts
。在那种情况下,前 3 个频率将是:
1. sun: 5
2. saturn: 4
3. earth: 3
但是文档频率,即单词出现的行数,将是
1. sun: 4
2. earth: 3
3. saturn: 2
我能想到的一种方法是对系列应用 lambda 函数,拆分每个字符串,从中创建一个集合,然后将所有单词组合成一个集合,制作一个系列然后使用 value_counts
。有没有更有效的方法来实现同样的事情?
因为性能很重要 Counter
:
from collections import Counter
a = Counter([y for x in s for y in x.split()]).most_common(3)
print (a)
[('sun', 5), ('saturn', 4), ('earth', 3)]
b = Counter([y for x in s for y in set(x.split())]).most_common(3)
print (b)
[('sun', 4), ('earth', 3), ('saturn', 2)]
df1 = pd.DataFrame(a, columns=['val','count'])
#df2 = pd.DataFrame(b, columns=['val','count'])
print (df1)
val count
0 sun 5
1 saturn 4
2 earth 3
Pandas 备选方案:
a = s.str.split(expand=True).stack().value_counts().head(3)
print (a)
sun 5
saturn 4
earth 3
dtype: int64
b = (s.str.split(expand=True)
.stack()
.reset_index(name='val')
.drop_duplicates(['val', 'level_0'])['val']
.value_counts()
.head(3))
print (b)
sun 4
earth 3
saturn 2
Name: val, dtype: int64