Как узнать количество повторяющихся комментариев для каждого пользователя из pandas dataframe? - PullRequest
0 голосов
/ 27 мая 2018

У меня есть фрейм данных со списком имен пользователей и их комментариев, см. Формат ниже.

Какой самый быстрый и эффективный подход для поиска повторяющихся дублирующих комментариев (спама) для каждого пользователя?

Формат кадра данных:

Author  | Comment
casy    Nice picture! 
linda   I like this 
casy    Nice picture! 
tom     I disagree 
bob     Follow me 
bob     Follow me 
bob     Follow me 
bob     Follow me 
casy    Nice picture! 
casy    Wow! 
linda   Interesting post 
linda   Check my profile
bob     Dissapointing
casy    Wow! 

Я хочу получить результат в следующем формате, поэтому полученная таблица будет иметь вид:

Author  | Number of dup. comments (descending)  | Comment   
bob     4   Follow me 
casy    3   Nice picture
casy    2   Wow! 
bob     1   Dissapointing 
linda   1   I like this 
linda   1   Check my profile
linda   1   Interesting post 
tom     1   I disagree

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Интуитивно понятный value_counts

... с помощью метода, предназначенного для этой цели

df.groupby('Author').Comment.value_counts().sort_values(
    ascending=False).reset_index(name='Number')

  Author           Comment  Number
0    bob         Follow me       4
1   casy     Nice picture!       3
2   casy              Wow!       2
3    tom        I disagree       1
4  linda  Interesting post       1
5  linda       I like this       1
6  linda  Check my profile       1
7    bob     Dissapointing       1

pd.factorize и np.bincount

f, u = pd.factorize(list(zip(df.Author, df.Comment)))
a, c = zip(*u)
pd.DataFrame(dict(
    Author=a, Comment=c, Number=np.bincount(f)
)).sort_values('Number', ascending=False)

Counter

from collections import Counter

pd.Series(
    Counter(zip(df.Author, df.Comment))
).rename_axis(['Author', 'Comment']).reset_index(name='Number')
0 голосов
/ 27 мая 2018

Сначала используйте groupby с size, затем sort_values, создавайте столбцы по reset_index и последнимпри необходимости измените порядок столбцов на reindex:

df = (df.groupby(['Author', 'Comment'], sort=False).size()
       .sort_values(ascending=False)
       .reset_index(name='Number')
       .reindex(columns=['Author','Number','Comment']))
print (df)
  Author  Number           Comment
0    bob       4         Follow me
1   casy       3     Nice picture!
2   casy       2              Wow!
3    bob       1     Dissapointing
4  linda       1  Check my profile
5  linda       1  Interesting post
6    tom       1        I disagree
7  linda       1       I like this
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...