gpt4 book ai didi

Python Pandas NLTK 带有 Groupby 的数据框列中标记化单词的频率分布

转载 作者:行者123 更新时间:2023-12-03 04:27:45 25 4
gpt4 key购买 nike

我有以下示例数据框:

No  category    problem_definition
175 2521 ['coffee', 'maker', 'brewing', 'properly', '2', '420', '420', '420']
211 1438 ['galley', 'work', 'table', 'stuck']
912 2698 ['cloth', 'stuck']
572 2521 ['stuck', 'coffee']

problem_definition 字段已被标记化,并删除了停顿词。

我想创建一个输出另一个 Pandas 数据帧的频率分布:

1) 计算 Problem_definition 中每个单词出现的频率2)按类别字段计算problem_definition中每个单词出现的频率

下面是案例 1) 的所需输出示例:

text       count
coffee 2
maker 1
brewing 1
properly 1
2 1
420 3
stuck 3
galley 1
work 1
table 1
cloth 1

下面是案例 2) 的所需输出示例:

category    text       count
2521 coffee 2
2521 maker 1
2521 brewing 1
2521 properly 1
2521 2 1
2521 420 3
2521 stuck 1
1438 galley 1
1438 work 1
1438 table 1
1438 stuck 1
2698 cloth 1
2698 stuck 1

我尝试了以下代码来完成 1):

from nltk.probability import FreqDist
import pandas as pd

fdist = FreqDist(df['problem_definition_stopwords'])

类型错误:不可散列的类型:“列表”

我不知道该怎么做2)

最佳答案

使用unnesting ,我一步一步介绍了解决此类问题的几种方法,为了好玩我只是链接question在这里

unnesting(df,['problem_definition'])
Out[288]:
problem_definition No category
0 coffee 175 2521
0 maker 175 2521
0 brewing 175 2521
0 properly 175 2521
0 2 175 2521
0 420 175 2521
0 420 175 2521
0 420 175 2521
1 galley 211 1438
1 work 211 1438
1 table 211 1438
1 stuck 211 1438
2 cloth 912 2698
2 stuck 912 2698
3 stuck 572 2521
3 coffee 572 2521

然后只需对情况 2 执行常规 groupby + size

unnesting(df,['problem_definition']).groupby(['category','problem_definition']).size()
Out[290]:
category problem_definition
1438 galley 1
stuck 1
table 1
work 1
2521 2 1
420 3
brewing 1
coffee 2
maker 1
properly 1
stuck 1
2698 cloth 1
stuck 1
dtype: int64

关于案例1value_counts

unnesting(df,['problem_definition'])['problem_definition'].value_counts()
Out[291]:
stuck 3
420 3
coffee 2
table 1
maker 1
2 1
brewing 1
galley 1
work 1
cloth 1
properly 1
Name: problem_definition, dtype: int64

我自己定义函数

def unnesting(df, explode):
idx=df.index.repeat(df[explode[0]].str.len())
df1=pd.concat([pd.DataFrame({x:np.concatenate(df[x].values)} )for x in explode],axis=1)
df1.index=idx
return df1.join(df.drop(explode,1),how='left')

关于Python Pandas NLTK 带有 Groupby 的数据框列中标记化单词的频率分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53528571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com