使用现有数据框的分组比率构建新数据框
Build New Dataframe with Grouped Ratios from Existing Dataframe
我有一个包含以下列("User"、"ProdCode"、"Sentiment"、"Review")的数据框,其中 "ProdCode" 包含产品代码,并且"Sentiment" 包含值 0、1、2,"Review" 包含字符串文本评论。请参见下面的示例:
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]
我正在尝试创建一个 DataFrame 来对 "ProdCode" 进行分组并显示 3 个比率:
1) 情绪 = 0 的行数 / 产品代码的评论总数
2) 情绪 = 1 的行数 / 产品代码的评论总数
3) 情绪 = 2 的行数/产品代码的评论总数
看起来像这样:
ProdCode SentimentRatio0 SentimentRatio1 SentimentRatio2
X1 .67 0 .33
X2 0 .33 .67
X3 0 0 1.00
我已经尝试了很多不成功的 Dataframe 新字段创建,代码如下。
DFF['sent0_ratio'] = [(count(DFF[sentiment])) if x == "0" else "0" for x in DFF.sentiment]
或
DFF['sent0_ratio'] = sum(DFF['sentiment' if x == 0 for x in DFF.sentiment].groupby(DFF['ProdCode']).mean(), 2)
这些都没有按预期工作。我什至不认为我很接近。
通过连接两个单独的数据框组结果来创建一个新的数据框。第一个将按 "ProdCode" 和 "Sentiment" 分组,第二个将按 "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
我有一个包含以下列("User"、"ProdCode"、"Sentiment"、"Review")的数据框,其中 "ProdCode" 包含产品代码,并且"Sentiment" 包含值 0、1、2,"Review" 包含字符串文本评论。请参见下面的示例:
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]
我正在尝试创建一个 DataFrame 来对 "ProdCode" 进行分组并显示 3 个比率:
1) 情绪 = 0 的行数 / 产品代码的评论总数
2) 情绪 = 1 的行数 / 产品代码的评论总数
3) 情绪 = 2 的行数/产品代码的评论总数
看起来像这样:
ProdCode SentimentRatio0 SentimentRatio1 SentimentRatio2
X1 .67 0 .33
X2 0 .33 .67
X3 0 0 1.00
我已经尝试了很多不成功的 Dataframe 新字段创建,代码如下。
DFF['sent0_ratio'] = [(count(DFF[sentiment])) if x == "0" else "0" for x in DFF.sentiment]
或
DFF['sent0_ratio'] = sum(DFF['sentiment' if x == 0 for x in DFF.sentiment].groupby(DFF['ProdCode']).mean(), 2)
这些都没有按预期工作。我什至不认为我很接近。
通过连接两个单独的数据框组结果来创建一个新的数据框。第一个将按 "ProdCode" 和 "Sentiment" 分组,第二个将按 "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