如何对多层索引pandas groupby对象应用自定义函数计算用户趋势斜率
实现方案
直接对第一层索引user_id分组调用apply即可,无需手动循环构造字典,代码如下:
slope_result = grouped_count_pm.groupby(level="user_id")[("operations_type", "count")].apply( lambda x: trendline(np.array(x)) ).reset_index(name="slope")
代码说明
groupby(level="user_id")直接指定按多层索引的第一层分组,不需要额外提取用户列表做循环- 通过
[("operations_type", "count")]直接定位聚合后的多层列名,精准获取计数值 - apply会自动将每个用户对应的所有计数值序列传入自定义函数,最终通过
reset_index把索引转为普通列,直接得到仅包含user_id和slope两列的DataFrame结果,和原有循环逻辑计算结果完全一致。
优化点
- 删掉原有循环中冗余的
trans_grouped_count_pm.transform(trendline)代码,该语句无赋值操作,不影响结果只会增加无效计算 - 如果你的
trendline函数支持直接传入pandas Series对象,可以省略np.array()转换,直接写lambda x: trendline(x)即可。
内容的提问来源于stack exchange,提问作者TheDoctor
相关产品推荐
相关产品推荐

