使用groupby进行单词计数然后使用python循环出现的问题

2024-09-29 01:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

字数和累计和

我的数据设置为150万行。此数据集是一个时间序列,其格式如下所示。我试图以累加的格式计算每年的字符串数。示例如下:

lodgement_year                trademark_text
  1906                          PEPS
  1906  BILE BEANS FOR BILIOUSNESS B
  1906                     ZAM-BUK Z

  lodgement_year
  1906    {PEPS BILE BEANS FOR BILIOUSNESS B ZAM-BUK Z Z...

  1907    {WHS CHERUB BLACK & WHITE SOUTHERN CROSS HISTO...

作为最初的任务,我将字符串分组,然后使用xxx在这个论坛上发布的代码全年应用一个循环。当循环正常工作时,下面的消息直接出现在后面:

^{pr2}$

错误消息:

回溯(最近一次呼叫):

文件“/Users/PycharmProjects/Slice_Time_Series”,第65行,in X=ngram_vectorizer.fit_变换(数据.拆分('\n'))

File“/Users/anaconda3/lib/python3.6/site-packages/pandas/core/通用.py“,第3081行,ingetattr 返回对象。getattribute(self,name) AttributeError:“Series”对象没有属性“split”

错误发生前的输出:

 1906 [('.', 24), ("'s", 22), ('star', 18), ('&', 15), ('kodak', 12), ('co', 9), ('the', 9), ('brand', 8), ('express', 8), ('anchor', 6)]
 1907 [('&', 11), ("'s", 11), ('brand', 11), ('pinnacle', 7), ('vaseline', 7), ('the', 6), ('.', 5), ('co.', 5), ('kepler', 5), ('lucas', 5)]

任何帮助将不胜感激。作为下一个任务,我试图创建一个系列,它是1906年,然后是1906年加上1907年,然后是1906年+1907年+1908年的总和,我还不知道该怎么做,任何指导也将是伟大的。在

伊恩


Tags: 数据字符串消息for格式错误yearusers
1条回答
网友
1楼 · 发布于 2024-09-29 01:26:02

可以首先按lodgement变量对DF进行分组,然后迭代名称组对,执行另一个groupby,最后连接结果。在

import pandas as pd
from collections import Counter
df = pd.DataFrame({'lodg':[1,2,1,3,1,2,2,3,1,1],
               'text':['x y z','y y','x y','z x','y x','y y z','x z','x x','x x','y z']})
grouped = df.groupby('lodg')
joined = []
for name, group in grouped:
    texts = " ".join(group['text'])
    groupCounts = Counter(texts.split(" ")).items()
    joined.append([name, [texts], groupCounts])
groupedJoined = pd.DataFrame(joined, columns = ['lodg','texts','textCounts'])

结果:

^{pr2}$

在显式解之后,只需要一点时间就可以得到1-线性lambda解。在

两个羔羊:

df.groupby('lodg')['text'].apply(lambda x: "%s" % ' '.join(x)).apply(lambda x: Counter(x.split(" ")).items())

单λ:

df.groupby('lodg')['text'].apply(lambda x: Counter((' '.join(x)).split(" ")).items())

两者产生相同的结果:

Out[62]: 
lodg
1    [(y, 4), (x, 5), (z, 2)]
2    [(y, 4), (x, 1), (z, 2)]
3            [(x, 3), (z, 1)]
Name: text, dtype: object

现在,如果您不想处理未命名的列(实际上称为index),请将结果命名为res,然后执行res.reset_index()来获得:

In [68]: res.reset_index()
Out[68]: 
   lodg                      text
0     1  [(y, 4), (x, 5), (z, 2)]
1     2  [(y, 4), (x, 1), (z, 2)]
2     3          [(x, 3), (z, 1)]

这应该更容易理解。在

相关问题 更多 >