亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從列表中查找數據框中單詞的頻率

從列表中查找數據框中單詞的頻率

動漫人物 2023-06-27 13:34:35
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'])list我想計算df中每個水果的出現頻率。預期輸出:df2Fruit       | FrequencyApple       |    2     Banana      |    2Cherries    |    3Dragonfruit |    3Elderberry  |    1該代碼df.favorite_fruit.str.split(expand=True).stack().value_counts()適用于小型 DataFrame。如果df.favorite_fruit包含數千行不同的水果組合,我如何只找到其中單詞的頻率list?
查看完整描述

3 回答

?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

也許這是一個漏洞答案,但您可以從已經描述的答案中過濾掉這些值。所以如果你從這個開始:


>>> df2 = df.favorite_fruit.str.split(expand=True).stack()

>>> df2


0  0          apple

   1         banana

   2       cherries

1  0         banana

   1       cherries

   2    dragonfruit

2  0       cherries

   1    dragonfruit

3  0    dragonfruit

4  0          apple

   1     elderberry

dtype: object

您可以使用isin將數據限制為目標列表中的數據:


>>> target = ['apple', 'banana']

>>> df2[df2.isin(target)].value_counts()


banana    2

apple     2

dtype: int64

或者甚至在你最初的回答之后:


>>> df.favorite_fruit.str.split(expand=True).stack().value_counts().loc[target]


apple     2

banana    2

dtype: int64

如果問題是這么多數據的expand操作stack成本很高,那么這可能不會令人滿意。但我認為這可能比基于循環的答案更好?


查看完整回答
反對 回復 2023-06-27
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

也許有點迂回的方式,但如果你的favorite_fruit列總是以空格分隔,這樣的方法應該可行:


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'])


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  frequency

0        apple          2

1       banana          2

2     cherries          3

3  dragonfruit          3

4   elderberry          1


查看完整回答
反對 回復 2023-06-27
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

拆分后嘗試使用爆炸功能。


df.favorite_fruit.str.split().explode().value_counts()


cherries       3

dragonfruit    3

banana         2

apple          2

elderberry     1

Name: favorite_fruit, dtype: int64


查看完整回答
反對 回復 2023-06-27
  • 3 回答
  • 0 關注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號