Панды группируют по нескольким столбцам, подсчитывают и пересчитывают - PullRequest
0 голосов
/ 23 октября 2018

Имея следующий фрейм данных:

                     UserID TweetLanguage
2014-08-25 21:00:00  001        english
2014-08-27 21:04:00  001        arabic
2014-08-29 22:07:00  001        espanish
2014-08-25 22:09:00  002        english
2014-08-26 22:09:00  002        espanish
2014-08-25 22:09:00  003        english 

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

Например, в приведенном выше кадре данных пользователи 001 и 002 написали твиты на нескольких языках.Таким образом, на графике соответствующее значение для этой недели должно быть 2. Та же история для других недель.

Ответы [ 3 ]

0 голосов
/ 23 октября 2018
df.groupby([pd.Grouper(freq='W'), 'User ID'])['TweetLanguage'].nunique().unstack().plot()
0 голосов
/ 23 октября 2018

Используйте 2 groupbys.Первый находит пользователей, которые публикуют на нескольких языках каждую неделю, второй подсчитывает, сколько их в неделю.

(df.groupby([df.index.year.rename('year'), df.index.week.rename('week'), 'UserID']).TweetLanguage.nunique() > 1).groupby(level=[0,1]).sum()

#year  week
#2014  35      2.0
#Name: TweetLanguage, dtype: float64
0 голосов
/ 23 октября 2018
df.groupby(pd.Grouper(key='datetime', freq='W')).apply(lambda df:\
df.groupby('UserID').apply(lambda df: len(df.TweetLanguage.value_counts())))

Это один вкладыш, который будет разделять неделю и получать количество языков в неделю

df.groupby('UserID').apply(lambda df: len(df.TweetLanguage.value_counts()))

Возвращает серию с индексом: значение идентификатора пользователя: количество использованного языказа каждую неделю ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...