猿问

从列表中查找数据框中单词的频率

import pandas as pd

list = ['apple','banana','cherries','dragonfruit','elderberry']

data = {'name': ['Alpha', 'Bravo','Charlie','Delta','Echo'],

             'favorite_fruit':  ['apple banana cherries', 'banana cherries dragonfruit',

                           'cherries dragonfruit','dragonfruit','apple elderberry']}


df = pd.DataFrame (data, columns = ['name','favorite_fruit'])

list我想计算df中每个水果的出现频率。预期输出:


df2

Fruit       | Frequency

Apple       |    2     

Banana      |    2

Cherries    |    3

Dragonfruit |    3

Elderberry  |    1

该代码df.favorite_fruit.str.split(expand=True).stack().value_counts()适用于小型 DataFrame。如果df.favorite_fruit包含数千行不同的水果组合,我如何只找到其中单词的频率list?


动漫人物
浏览 158回答 3
3回答

繁星淼淼

也许这是一个漏洞答案,但您可以从已经描述的答案中过滤掉这些值。所以如果你从这个开始:>>> df2 = df.favorite_fruit.str.split(expand=True).stack()>>> df20  0          apple   1         banana   2       cherries1  0         banana   1       cherries   2    dragonfruit2  0       cherries   1    dragonfruit3  0    dragonfruit4  0          apple   1     elderberrydtype: object您可以使用isin将数据限制为目标列表中的数据:>>> target = ['apple', 'banana']>>> df2[df2.isin(target)].value_counts()banana    2apple     2dtype: int64或者甚至在你最初的回答之后:>>> df.favorite_fruit.str.split(expand=True).stack().value_counts().loc[target]apple     2banana    2dtype: int64如果问题是这么多数据的expand操作stack成本很高,那么这可能不会令人满意。但我认为这可能比基于循环的答案更好?

拉丁的传说

也许有点迂回的方式,但如果你的favorite_fruit列总是以空格分隔,这样的方法应该可行:import pandas as pdlist = ['apple','banana','cherries','dragonfruit','elderberry']data = {'name': ['Alpha', 'Bravo','Charlie','Delta','Echo'],             'favorite_fruit':  ['apple banana cherries', 'banana cherries dragonfruit',                           'cherries dragonfruit','dragonfruit','apple elderberry']}df = pd.DataFrame (data, columns = ['name','favorite_fruit'])new_df = pd.DataFrame()data = {}for i, row in df.iterrows():    s = row['favorite_fruit']    items = s.split(' ')    for item in items:        if item in data.keys():            data[item].append(1)        else:            data[item] = [1]for key, value in data.items():    data[key] = sum(value)fruit = []frequency = []for key, value in data.items():    fruit.append(key)    frequency.append(value)new_df = pd.DataFrame({'fruit': fruit, 'frequency':frequency})print(new_df)这会打印出以下内容:         fruit  frequency0        apple          21       banana          22     cherries          33  dragonfruit          34   elderberry          1

哆啦的时光机

拆分后尝试使用爆炸功能。df.favorite_fruit.str.split().explode().value_counts()cherries       3dragonfruit    3banana         2apple          2elderberry     1Name: favorite_fruit, dtype: int64
随时随地看视频慕课网APP

相关分类

Python
我要回答