计算一些使用Pandas对数据进行分组的事件

Ste*_*eve 3 python grouping pandas

我的数据集结构如下:

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
Run Code Online (Sandbox Code Playgroud)

对于每一天,我都有一些信息,如身体(一般文字)和相关的情绪.我想知道,对于每一天,正,负和无(没有值)行的计数.

我尝试过这样的东西,但不起作用:

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

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

有任何想法吗?

jez*_*ael 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
Run Code Online (Sandbox Code Playgroud)

详情:

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

另一种解决方案:GroupBy.sizejoin:

df = df.join(df.groupby(['date', 'sentiment']).size().unstack(fill_value=0), on='date')
Run Code Online (Sandbox Code Playgroud)