В столбце считать слово в предложении через запятую - PullRequest
2 голосов
/ 10 февраля 2020

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

  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 ]

4 голосов
/ 10 февраля 2020

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

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

Вывод:

apple     3
banana    3
grape     2
orange    1
dtype: int64

С помощью средства доступа str для pandas затем split on ',', stack the столбцы в индекс строки и использовать value_counts.

1 голос
/ 10 февраля 2020

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

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

Вы можете сделать это, предполагая, что 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)))
...