首页 > 解决方案 > 对 pandas 中的两列进行分组,并对每组的总计执行操作

问题描述

下面的代码:

df = pd.read_csv('./filename.csv', header='infer').dropna()

df.groupby(['category_code','event_type']).event_type.count().head(20)

返回下表:

在此处输入图像描述

对于 event_type 下同时具有“purchase”和“view”的所有子组,我如何获得“purchase”总数与“view”总数之间的比率?

例如,在这种特定情况下,我需要一个返回的函数:

1/57

1/232

3/249

最终,我需要绘制这样的结果。

我已经尝试了一天,没有成功。我还是熊猫的新手,我搜索了所有可能的论坛,但没有找到任何有用的东西。

标签: pandasdataframepandas-groupby

解决方案


下次请考虑将数据样本添加为文本而不是图像。它帮助我们测试..

无论如何,在您的情况下,您可以组合不同的数据框方法,例如groupby,正如您已经完成的那样,以及pivot_table. 我以这个数据为例:

  category_code event_type
0             A   purchase
1             A       view
2             B       view
3             B       view
4             C       view
5             D   purchase
6             D       view
7             D       view

您可以从您的groupby

df['event_count'] = df.groupby(['category_code', 'event_type'])\
                      .event_type.transform('count')

然后创建一个pivot_table

my_table = df.pivot_table(values='event_count', 
                          index='category_code', 
                          columns='event_type', 
                          fill_value=0)

然后,最后,您可以purchase_ratio直接计算:

my_table['purchase_ratio'] = my_table['purchase'] / my_table['view']

这导致以下DataFrame:

event_type     purchase  view  purchase_ratio
category_code                                
A                     1     1             1.0
B                     0     2             0.0
C                     0     1             0.0
D                     1     2             0.5

推荐阅读