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

У меня есть набор данных, структурированный так:

id    date       body        sentiment
1     1/1/2018   Some Text   Positive
2     1/1/2018   Some Text   Negative
3     1/1/2018   Some Text   None
4     1/2/2018   Some Text   Positive
5     1/2/2018   Some Text   None

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

Я пробовал что-то подобное, но не работает:

df.groupby('date', 'sentiment').count()

df['positive'] = df.groupby('date', 'sentiment').apply(lambda x: x is  Positive).count()

Есть идеи?

1 Ответ

0 голосов
/ 08 ноября 2018

Используйте crosstab с merge и оставьте соединение:

df = df.merge(pd.crosstab(df['date'], df['sentiment']), on='date', how='left')
print (df)
   id      date       body sentiment  Negative  None  Positive
0   1  1/1/2018  Some Text  Positive         1     1         1
1   2  1/1/2018  Some Text  Negative         1     1         1
2   3  1/1/2018  Some Text      None         1     1         1
3   4  1/2/2018  Some Text  Positive         0     1         1
4   5  1/2/2018  Some Text      None         0     1         1

Detail:

print (pd.crosstab(df['date'], df['sentiment']))
sentiment  Negative  None  Positive
date                               
1/1/2018          1     1         1
1/2/2018          0     1         1

Другое решение с GroupBy.size и join:

df = df.join(df.groupby(['date', 'sentiment']).size().unstack(fill_value=0), on='date')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...