使用Pandas对数据进行分组计数

3

I've a Dataset structured like this:

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

对于每一天,我都有一些与情感相关的正文信息和相应的情感值。

对于每一天,我想知道积极、消极和没有值(即空)的行数。

我尝试了像下面这样的代码,但是并不起作用:

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

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

任何想法吗?
1个回答

5

使用 crosstabmerge 和左连接:

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

详情:

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.sizejoin的另一种解决方案:

df = df.join(df.groupby(['date', 'sentiment']).size().unstack(fill_value=0), on='date')

@Steve - 当然,crosstab 可以创建两个(或更多)因素的交叉制表。它类似于使用值长度进行透视。 - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接