В столбце считать слово в предложении через запятую

Предполагается, что мой фрейм данных

  Name  Value
0   K   apple,banana
1   Y   banana
2   B   orange,banana
3   Q   grape,apple
4   C   apple,grape

Я хочу посчитать слово в столбце «Значение», поэтому, когда я применил как

pd.Series(np.concatenate([x.split() for x in df.Value])).value_counts()

pd.Series(' '.join(df.Value).split()).value_counts()

как вывод:

apple,banana : 1
banana : 1
orange,banana : 1
grape,apple : 1
apple,grape : 1

но

выведите то, что я хочу

apple : 3
banana : 3
orange : 1
grape : 2 

Как я могу это сделать?

Спасибо за чтение.

Всего 3 ответа


Попробуйте это вместо этого:

df['Value'].str.split(',', expand=True).stack().value_counts()

Выход:

apple     3
banana    3
grape     2
orange    1
dtype: int64

Используя аксессор str для панд, затем split на ',', value_counts столбцы в индекс строки и используйте value_counts .


Вы можете подойти к этому тремя способами:

  • Либо вы можете изолировать столбец как список df ['col']. Tolist () с последующим разделением каждого элемента в списке. Это даст вам список списков, которые вам нужно будет сгладить, а затем использовать коллекции. Счетчик в этом списке
  • Подход pandas состоит в том, чтобы изолировать этот столбец и расширить его, используя что-то вроде этого: https://cmdlinetips.com/2018/11/how-to-split-a-text-column-in-pandas/ . Это может дать вам разреженный фрейм данных со всеми этими словами. Затем вы можете перебрать все столбцы и выполнить value_counts для каждого из этих столбцов после объединения этих подсчетов. (Ответ Скотта Бостона)
  • Третий и более питонический способ заключается в определении нового метода, который может возвращать счетчик счетчика для каждой строки и назначать его в новом столбце. Если у вас есть столбец, содержащий все значения словаря, найдите метод, который может объединить эти словари в столбце и обновить счетчики.

Надеюсь это поможет!


Вы можете сделать это, предполагая, что file содержит ваши входные данные:

import pandas as pd
df=pd.read_csv('file',sep='s+')
itemslist=[i.split(',') for i in df['Value'].tolist()]
allitems=[item for sublist in itemslist for item in sublist]

for fruit in [ele for ind, ele in enumerate(allitems,1) if ele not in allitems[ind:]]:
    print("{} {}".format(fruit,allitems.count(fruit)))

Есть идеи?

10000