python - 使用现有数据框的分组比率构建新的数据框

标签 python python-3.x dataframe group-by calculation

我有一个包含以下列(“用户”、“产品代码”、“情绪”、“评论”)的数据框,其中“产品代码”包含产品代码,“情绪”包含值 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]

或者

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

关于python - 使用现有数据框的分组比率构建新的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55839771/

相关文章:

python - 字典 : new entity taking old property? 的 GAE NDB PickleProperty

python - 所有任务完成后如何终止 python asyncio event_loop

python - 如何从列表中解压四个变量?

python - 提取字典的子集后如何保持顺序?

python - Pandas 组合多个 csv 文件

python - 如何在python中输入字母

python - 需要重复Flask表单,一个表单类的多个实例

r - 计算两级因子交替时重新开始的差异

python - 获取数据框中以数字开头的所有值

python - Pandas Dataframe 中的 MultiIndex Groupby