pandas: groupby + хранить в другом фрейме данных

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

По сути, у меня есть фрейм данных, называемый comms, который выглядит так:

articleID   Material    commentScore
 1234         News          0.75      
 1234         News          -0.1      
 5678         Sport         1.33      
 5678         News          0.75      
 5678        Fashion        0.02 
 7412       Politics        -3.45              

и еще один кадр данных под названием arts, и он выглядит так:

articleID   wordCount      byLine
 1234         1524          John     
 5678         9824          Mary    
 7412         3713          Sam

Я хотел бы просто подсчитать, сколько comms есть для каждого articleID, и сохранить это число в новом столбце кадра данных arts с именем commentNumber.

Я думаю, что мне нужно использовать groupby, count() и, возможно, merge, но я не могу понять, почему.

Ожидаемый результат

articleID   wordCount      byLine    commentNumber
 1234         1524          John         2
 5678         9824          Mary         3
 7412         3713          Sam          1

Заранее спасибо! Андреа


person Sala    schedule 22.04.2021    source источник
comment
Каков ваш ожидаемый/желаемый результат? Пожалуйста, предоставьте образец фрейма данных с обработанными данными.   -  person albert    schedule 22.04.2021
comment
Вы абсолютно правы, я забыл его предоставить. Отредактировано сейчас   -  person Sala    schedule 22.04.2021


Ответы (2)


Используйте groupby(), затем count() в одном столбце. Наконец, сопоставьте результат с articleID столбцами arts.

arts['commentNumber'] = arts['articleID'].map(comms.groupby('articleID')['Material'].count())
print(arts)

   articleID  wordCount byLine  commentNumber
0       1234       1524   John              2
1       5678       9824   Mary              3
2       7412       3713    Sam              1
person Ynjxsjmh    schedule 22.04.2021
comment
Спасибо, Ynjxsjmh. - person Sala; 22.04.2021

Используйте Series.map с Series.value_counts:

arts['commentNumber'] = arts['articleID'].map(comms['articleID'].value_counts())
print (arts)
   articleID  wordCount byLine  commentNumber
0       1234       1524   John              2
1       5678       9824   Mary              3
2       7412       3713    Sam              1

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

from collections import Counter
arts['commentNumber'] = arts['articleID'].map(Counter(comms['articleID']))
person jezrael    schedule 22.04.2021
comment
Это не обман? - person Shubham Sharma; 22.04.2021
comment
@ShubhamSharma - я думаю, что нет, transform здесь нельзя использовать. Но так ли близок последний ответ - только для 2-х разных df. - person jezrael; 22.04.2021
comment
@ShubhamSharma - Но, может быть, найду лучший обман, дайте мне знать, тогда я смогу закрыть - person jezrael; 22.04.2021
comment
Достаточно справедливо, но я думаю, что это почти похоже. - person Shubham Sharma; 22.04.2021