Python-将groupby返回值转换为所需的数据帧

时间:2018-12-20 21:08:56

标签: python python-3.x pandas

我正在尝试转换数据帧A

数据框A

App_ID  Review_Rating   Grouping
 4        3              Low
13        2              Low
13        2              Low
20        2              Low
20        4              High
8         1              Low
8         1              Low
8         1              Low
15        4              High
7         3              Low
4         3              Low
4         3              Low
4         3              Low
4         3              Low
4         5              High
7         5              High
15        3              Low

进入数据框B(该数据框包含按百分比分组的值):

App_ID    Percentage of Grouping
          Low     High
4         75      25
13        100     0
20        33      67
8         100     0
15        42.8    57.14
7         37.5    62.5

这是我的代码:

dataframeB=(dataframeA.groupby(['App_ID','Grouping'])['Review_Rating'].count()/dataframeA.groupby('App_ID')['Review_Rating'].count()*100).reset_index()

但是,它没有提供所需的输出。我的代码输出:

App_ID   Grouping   Review_Rating
4        Low        75
4        High       25
13       Low        100
13       High       0
20       Low        33
20       High       67
8        Low        100
8        High       0
15       Low        42.8
15       High       57.14
7        Low        37.5
7        High       62.5

正在寻求您的帮助以解决此问题。预先感谢

1 个答案:

答案 0 :(得分:2)

非常接近pivot问题,但是您需要进行规范化。使用crosstab

pd.crosstab(df.App_ID,df.Grouping,df.Review_Rating,aggfunc='sum',normalize ='index')*100
Out[90]: 
Grouping       High         Low
App_ID                         
4         25.000000   75.000000
7         62.500000   37.500000
8          0.000000  100.000000
13         0.000000  100.000000
15        57.142857   42.857143
20        66.666667   33.333333