我有一个这样的数据集:
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()
有什么想法吗?
答案 0 :(得分:5)
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.size
和join
的另一种解决方案:
df = df.join(df.groupby(['date', 'sentiment']).size().unstack(fill_value=0), on='date')