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)
有任何想法吗?
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.size和join:
df = df.join(df.groupby(['date', 'sentiment']).size().unstack(fill_value=0), on='date')
Run Code Online (Sandbox Code Playgroud)