我有一个包含以下列(“用户”,“ ProdCode”,“情感”,“审阅”)的数据框,其中“ ProdCode”包含产品代码,“情感”包含0、1、2 ,“评论”包含一个字符串文本评论。请参见下面的示例:
User ProdCode Sentiment Review
User1 X1 0 [string]
User2 X1 0 [string]
User3 X1 2 [string]
User4 X2 1 [string]
User5 X2 2 [string]
User6 X2 1 [string]
User7 X3 2 [string]
User8 X3 2 [string]
我正在尝试创建一个对“ ProdCode”进行分组并显示3个比率的DataFrame:
1)情感= 0 /产品代码评论总数的行数
2)情感= 1 /产品代码评论总数的行数
3)情感= 2 /产品代码评论总数的行数
看起来像这样:
ProdCode SentimentRatio0 SentimentRatio1 SentimentRatio2
X1 .67 0 .33
X2 0 .33 .67
X3 0 0 1.00
我尝试在数据框(以下代码)中创建许多新字段而未成功。
DFF['sent0_ratio'] = [(count(DFF[sentiment])) if x == "0" else "0" for x in DFF.sentiment]
OR
DFF['sent0_ratio'] = sum(DFF['sentiment' if x == 0 for x in DFF.sentiment].groupby(DFF['ProdCode']).mean(), 2)
这些都没有按预期工作。我什至都不认为我会接近。
答案 0 :(得分:1)
通过合并两个单独的数据框组结果来制作新的数据框。第一个将按“ ProdCode”和“情绪”分组,第二个将按“ ProdCode”分组以获取每个“ ProdCode”的总数。加入“ ProdCode”并将列限制为“ Review”和“ Review_r”
df1 = (
df.groupby(["ProdCode", "Sentiment"])
.count()
.join(df.groupby("ProdCode").count(), "ProdCode", rsuffix="_r")
)[['Review', 'Review_r']]
df1
Review Review_r
ProdCode Sentiment
X1 0 2 3
2 1 3
X2 1 2 3
2 1 3
X3 2 2 2
计算“ Review” /“ Review_r”,将索引重置为列,并旋转以得到最终结果。
df1['result'] = df1['Review']/df1['Review_r']
df1 = df1.reset_index()
df1 = df1.pivot("ProdCode", 'Sentiment','result').fillna(0)
最终数据框:
Sentiment 0 1 2
ProdCode
X1 0.666667 0.000000 0.333333
X2 0.000000 0.666667 0.333333
X3 0.000000 0.000000 1.000000