pandas - 对 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
最终,我需要绘制这样的结果。
我已经尝试了一天,没有成功。我还是熊猫的新手,我搜索了所有可能的论坛,但没有找到任何有用的东西。
解决方案
下次请考虑将数据样本添加为文本而不是图像。它帮助我们测试..
无论如何,在您的情况下,您可以组合不同的数据框方法,例如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
推荐阅读
- r - 根据设定的 R^2 阈值选择样条函数的度数
- scala - Scala Spark 中的停用词去除器
- asp.net-core - ASP.NET API 控制器与 SignalR Hub 方法
- ios - Apple 订阅优惠代码在交叉分级时不起作用
- jooq - 禁用 JOOQ 警告
- node.js - NodeJS 的 Buffer.from(arrayBuffer) 创建过时的数据
- haskell - 压缩反向 Haskell
- powershell - Power BI:尝试更新参数 vi PowerShell API 调用
- c# - C# File.Move 创建一个空文件和 IO 异常
- javascript - 使用 Google Drive API 创建文件时,文件内容为空