如何在 Python 中对元组进行频率计数

问题描述 投票:0回答:1

所以我有一个df

标题 克鲁
[('18', 'nummod'), ('年份', 'nsubj'), ('of', '准备'), ('年龄', 'pobj'), ('或', 'cc' ), ('旧', 'conj'), ('with', '准备'), ('可切除', 'amod'), ('胰腺', 'amod'), ('腺癌', 'pobj' ), ('for', 'prep'), ('whom', 'pobj'), ('手术', 'nsubjpass'), ('is', 'auxpass'), ('计划', 'relcl' ), ('(', 'punct'), ('包括', 'ROOT'), ('边界', '复合'), ('可切除', 'dobj'), ('if', '标记' ), ('视为', 'advcl'), ('适当', 'oprd'), ('由', '代理人'), ('手术', 'amod'), ('调查员', 'pobj' ), (')', 'punct'), ('或', 'cc'), ('有', 'aux'), ('发生', 'conj'), ('内', '准备' ), ('the', 'det'), ('过去', 'amod'), ('3', 'nummod'), ('years', 'pobj')] 1
[('HER2', 'nsubj'), ('必须', 'aux'), ('负数', 'ccomp'), ('as', '标记'), ('显示', 'advcl' ), ('be', 'ROOT'), ('任一', 'preconj'), ('0', 'attr'), ('或', 'cc'), ('1', 'conj' ), ('+', 'conj'), ('by', 'prep'), ('免疫组织化学', 'pobj'), ('(', 'punct'), ('if', 'mark' ), ('2', 'dep'), ('+', 'advmod'), (',', 'punct'), ('in', 'prep'), ('situ', 'compound' ), ('杂交', '化合物'), ('方法', 'pobj'), ('使用', 'acl'), ('to', 'aux'), ('定义', 'xcomp' ), ('HER2', 'dobj'), (')', 'punct'), ('OR', 'pobj'), ('by', 'conj'), ('a', 'det' ), ('HER2', 'pobj'), (':', 'punct'), ('17', 'nummod'), ('着丝粒', 'amod'), ('信号', 'pobj' ), ('的', '准备'), ('<', 'nmod'), ('2.0', 'pobj'), ('using', 'acl'), ('a', 'det'), ('standard', 'dobj'), ('in', 'prep'), ('situ', 'amod'), ('hybridization', 'compound'), ('method', 'pobj')] 0
[('参与者', 'nsubj'), ('谁', 'nsubjpass'), ('是', 'auxpass'), ('计划', 'relcl'), ('到', 'aux' ), ('undergo', 'xcomp'), ('neo', 'nmod'), ('-', 'amod'), ('佐剂', 'amod'), ('化疗', 'dobj' ), ('are', 'ROOT'), ('合格', 'acomp'), ('as', 'advmod'), ('long', 'advmod'), ('as', '标记' ), ('他们', 'nsubj'), ('同意', 'advcl'), ('至', '准备'), ('an', 'det'), ('附加', 'amod' ), ('乳房', '化合物'), ('活检', 'pobj'), ('以下', '准备'), ('the', 'det'), ('饮食', 'amod' ), ('干预', 'pobj'), ('立即', 'advmod'), ('之前', 'advmod'), ('到', '准备'), ('开始', 'pcomp' ), ('化疗', 'dobj')] 0
[('不受控制', 'amod'), ('并发', '复合'), ('疾病', 'ROOT'), ('包括', '准备'), (',', 'punct' ), ('但是', 'cc'), ('不', '否定'), ('有限', 'conj'), ('到', '准备'), (',', 'punct' ), ('正在进行', 'amod'), ('或', 'cc'), ('活动', 'conj'), ('感染', 'pobj'), (',', 'punct' ), ('症状', 'amod'), ('充血', 'amod'), ('心脏', '复合'), ('失败', 'appos'), (',', 'punct' ), ('不稳定', 'amod'), ('心绞痛', '复合'), ('胸肌', 'appos'), (',', 'punct'), ('心脏', 'amod' ), ('心律失常', 'conj'), (',', 'punct'), ('或', 'cc'), ('精神病', 'amod'), ('疾病', 'nmod' ), ('/', 'punct'), ('社交', 'amod'), ('情况', 'conj'), ('那个', 'nsubj'), ('会', 'aux' ), ('限制', 'relcl'), ('合规性', 'dobj'), ('with', '准备'), ('研究', '化合物'), ('要求', 'pobj' )] 2

它是使用依赖解析生成的,输出是元组。

我想创建每个簇的每个元组的频率计数。

假设 ('18', 'nummod') 出现在 2 个簇中,那么它的频率将为 2,就像我们生成频率一样。使用 Countvectorizer 进行计数,但使用完整元组。

我找不到办法这样做,一些有效的方法只需要 NER 标签和绘图频率。但我想要频率。完整元组的计数,像这样生成,但使用元组而不是单词。请帮忙

python-3.x dataframe nlp tuples named-entity-recognition
1个回答
0
投票

假设“A header”列是Python列表,即

df.dtypes: A header object Clu int64 dtype: object
,您可以使用
pd.DataFrame.explode()
pd.Series.value_counts()

count_df = df.explode(column="A header").groupby("Clu")["A header"].value_counts().reset_index()

输出(

count_df.sample(n=5)
):

克鲁 标题
52 0 ('信号', 'pobj') 1
104 2 ('/', '标点符号') 1
83 1 ('包括','根') 1
38 0 ('+', 'advmod') 1
56 0 ('或','抄送') 1
© www.soinside.com 2019 - 2024. All rights reserved.