Подсчитайте количество слов в списке всех строк фрейма данных

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных, в котором в одном из столбцов есть строки со списком значений. Я хочу подсчитать количество встречаемости всех слов внутри списка среди всех строк.

Например: dataframe df

 Column A         Column B
animal            [cat, dog, tiger]
place             [italy, china, japan]
pets              [cat, dog]
  

Тогда мне нужен результат в виде:

 cat : 2
dog: 2
tiger: 1 and so on
  

Комментарии:

1. Что вы пробовали до сих пор?

Ответ №1:

Вам нужно сгладить значения до простого списка и посчитать значения — по Counter или по Series.value_counts :

 from collections import Counter

s = pd.Series(Counter([y for x in df['Column B'] for y in x]))
print (s)
cat      2
dog      2
tiger    1
italy    1
china    1
japan    1
dtype: int64
  

Альтернативный вариант 1:

 from itertools import chain
from collections import Counter

s = pd.Series(Counter(chain.from_iterable(df['Column B'])))
  

Альтернатива2:

 s = pd.Series(np.concatenate(df['Column B'])).value_counts()
  

Медленная альтернатива в больших данных:

 s = pd.Series(df['Column B'].sum()).value_counts()
  

Ответ №2:

Используйте счетчик из коллекций и распечатайте значения. Проверьте приведенный ниже код для справки.

 import pandas as pd

#for counting the elements
from collections import Counter

#dataframe with list values in column B
df = pd.DataFrame([[1,['apple','mango','apple'],3],[1,['mango','mango','soni'],3]],columns=['A','B','C'])

#formatting the output post counting
for i,row in df.iterrows():
    c = Counter(row['B'])
    print(f'for index {i}')
    for k in c.keys():
        print(f'{k}: {c.get(k)}')