Посчитайте частоту текста в списке в кадре данных - PullRequest
0 голосов
/ 31 мая 2019

Я новичок в python / pandas, но у меня есть вопрос, который я задам логически, чтобы помочь мне выучить

У меня есть фрейм данных, называемый party, со следующими данными

(index)    name                  invitees
0            birthday party     [mike, peter]
1            Retirement          [peter]
2            office opening     [simon, mike, peter]

Я хотел бы иметь возможность создать словарь, который будет показывать различные имена из столбца приглашенных вместе с частотой, например, что-то вроде этого

mike: 2, peter: 3, simon: 1

Я пытался найти что-то подобное здесь, но я 'Я не слишком уверен в правильной терминологии для использования.

Любая помощь будет принята с благодарностью. Большое спасибо

Ответы [ 4 ]

0 голосов
/ 31 мая 2019

просто так

df['invitees'].apply(pd.Series).unstack().reset_index(name='n').drop('level_1', axis=1).dropna().groupby('n').count().to_dict()['level_0']

{'mike': 2, 'peter': 3, 'simon': 1}
0 голосов
/ 31 мая 2019

Соберите имена из фрейма данных и затем используйте Счетчик:

from collections import Counter
import pandas as pd

# setup test data
data = {'invitees': [['mike', 'peter'], ['peter'], ['simon', 'mike', 'peter']]}
data = pd.DataFrame(data=data)

# select data series
names_lists = data['invitees']

# collect names
all_names = []
for item in names_lists:
    for name in item:
        all_names.append(name)

# count occurrence
summary = Counter(all_names)

Выход:

{'peter': 3, 'mike': 2, 'simon': 1}
0 голосов
/ 31 мая 2019
from collections import Counter

invitees = [["mike", "peter"],["peter"],["simon", "mike", "peter"]]
name = ["birthday party","Retirement","office opening"]

new_df = pd.DataFrame(data={"name":name,"invitees":invitees})

all_invitees = []
for i,row in new_df.iterrows():
    invitees.extend(row[1])

invitees_count = dict(Counter(all_invities))
0 голосов
/ 31 мая 2019

Вы можете использовать Счетчик из коллекций и цепочку из itertools для решения вашей проблемы:

from collections import Counter
from itertools import chain

df2= pd.DataFrame({
    'name':["blah", "blah-blah", "waka-waka"],
    'invites':[['mike', 'peter'], ['peter', 'mike'], ['waka', 'peter', 'simon']]
})
Counter([elem for elem in chain.from_iterable(df2['invites'].values)])

Counter({'mike': 2, 'peter': 3, 'simon': 1, 'waka': 1})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...