python - 我该如何解决?规范错误:不支持嵌套重命名器
问题描述
pandas 1.0 版本之后,更新了 API 的写法。原来的gropuby+agg grouping+aggregate函数写法改了,但是这个报错信息实在是让人摸不着头脑。
learners = mooc.groupby('anon_screen_name')
A_agg_learner = learners.agg(
{
'event_type': {
'nbr_events': lambda x: x.count(),
'nbr_pause_video': lambda x: (x == 'pause_video').sum(),
'forum_thread_reply': lambda x: (x == 'thread_reply').sum(),
'forum_comment_reply': lambda x: (x == 'comment_reply').sum(),
'forum_thread_update': lambda x: (x == 'thread_update').sum(),
'forum_comment_update': lambda x: (x == 'comment_update').sum(),
},
'nbr_session': {'nbr_sessions': lambda x: x.max() + 1},
'resource_display_name': {
'nbr_problem_visit': lambda x: x[x.isin(problem_name)].nunique()
},
'week': {'nbr_week': lambda x: x.nunique()},
}
)
A_agg_learner.columns = A_agg_learner.columns.droplevel()
A_agg_learner.columns = A_agg_learner.columns.droplevel()
A_agg_learner['nbr_forum_post_update']=A_agg_learner.forum_thread_update + A_agg_learner.forum_comment_update
A_agg_learner['nbr_forum_post_reply']=A_agg_learner.forum_thread_reply + A_agg_learner.forum_comment_reply
A_agg_learner['nbr_forum_post']=A_agg_learner.nbr_forum_post_update + A_agg_learner.nbr_forum_post_reply
A_agg_learner.drop('forum_thread_update', axis=1, inplace=True)
A_agg_learner.drop('forum_comment_update', axis=1, inplace=True)
A_agg_learner.drop('forum_thread_reply', axis=1, inplace=True)
A_agg_learner.drop('forum_comment_reply', axis=1, inplace=True)
A_agg_learner.drop('nbr_forum_post_reply', axis=1, inplace=True)
A_agg_learner.drop('nbr_forum_post_update', axis=1, inplace=True)
A_agg_learner.head()
错误是
Traceback (most recent call last)
1 learners=mooc.groupby("anon_screen_name")
----> 2 A_agg_learner=learners.agg({'event_type':{
3 'nbr_events':lambda x:x.count(),
4 'nbr_pause_video':lambda x: (x == 'pause_video').sum(),
5 'forum_thread_reply':lambda x: (x == 'thread_reply').sum(),
~\anaconda3\lib\site-packages\pandas\core\groupby\generic.py in aggregate(self, func, *args, **kwargs)
926 func = _maybe_mangle_lambdas(func)
927
--> 928 result, how = self._aggregate(func, *args, **kwargs)
929 if how is None:
930 return result
~\anaconda3\lib\site-packages\pandas\core\base.py in _aggregate(self, arg, *args, **kwargs)
340 # {'ra' : { 'A' : 'mean' }}
341 if isinstance(v, dict):
--> 342 raise SpecificationError("nested renamer is not supported")
343 elif isinstance(obj, ABCSeries):
344 raise SpecificationError("nested renamer is not supported")
SpecificationError: nested renamer is not supported
“anon_screen_name”示例是
,anon_screen_name,week,event_type,resource_display_name,time,event_duration,nbr_session,success,video_code,video_current_time,video_speed,video_old_time,video_new_time,video_seek_type,video_new_speed,video_old_speed,goto_from,goto_dest,ip_country,events
0,9a3d3f219e4cc1122e929e2daa4a7afcfc6ec2d9,,about,,2015-01-19 00:02:43,65913.0,0,,,,,,,,,,-1,-1.0,GBR,about
1,d39809aa673c09a836815d09b44f7ca9c9bed463,,about,,2015-01-19 00:02:49,44.0,0,,,,,,,,,,-1,-1.0,ITA,about
2,d39809aa673c09a836815d09b44f7ca9c9bed463,,edx.course.enrollment.activated,,2015-01-19 00:03:33,71802.0,0,,,,,,,,,,-1,-1.0,ITA,edx.course.enrollment.activated
3,34a807d69e6169b69c21572dbc45524b4384aadf,,about,,2015-01-19 00:03:44,170.0,0,,,,,,,,,,-1,-1.0,EGY,about
4,34a807d69e6169b69c21572dbc45524b4384aadf,,about,,2015-01-19 00:06:34,19450.0,0,,,,,,,,,,-1,-1.0,EGY,about
5,ee832c53a99187e34ddaa042c7514fa6e03489bd,,about,,2015-01-19 00:08:41,147.0,0,,,,,,,,,,-1,-1.0,POL,about
原始代码运行结果示例
解决方案
A_agg_learner=mooc.groupby("anon_screen_name").agg({'event_type':[
lambda x: x.count(),
lambda x: (x == 'pause_video').sum(),
lambda x: (x == 'thread_reply').sum(),
lambda x: (x == 'comment_reply').sum(),
lambda x: (x == 'thread_update').sum(),
lambda x: (x == 'comment_update').sum(),
],
'week': lambda x:x.nunique(),
'nbr_session': lambda x: x.max() + 1,
'resource_display_name': lambda x: x[x.isin(problem_name)].nunique()
})
A_agg_learner.columns = A_agg_learner.columns.droplevel()
A_agg_learner.columns = ['nbr_events', 'nbr_pause_video','forum_thread_reply','forum_comment_reply','forum_thread_update','forum_comment_update','nbr_week','nbr_sessions','nbr_problem_visit']
A_agg_learner['nbr_forum_post_update']=A_agg_learner.forum_thread_update + A_agg_learner.forum_comment_update
A_agg_learner['nbr_forum_post_reply']=A_agg_learner.forum_thread_reply + A_agg_learner.forum_comment_reply
A_agg_learner['nbr_forum_post']=A_agg_learner.nbr_forum_post_update + A_agg_learner.nbr_forum_post_reply
A_agg_learner.drop('forum_thread_update', axis=1, inplace=True)
A_agg_learner.drop('forum_comment_update', axis=1, inplace=True)
A_agg_learner.drop('forum_thread_reply', axis=1, inplace=True)
A_agg_learner.drop('forum_comment_reply', axis=1, inplace=True)
A_agg_learner.drop('nbr_forum_post_reply', axis=1, inplace=True)
A_agg_learner.drop('nbr_forum_post_update', axis=1, inplace=True)
# ActiveLS=A_agg_learner
A_agg_learner.head()
推荐阅读
- web-component - 阴影元素的全局 CSS 效果。为什么?
- ios - 为 swift 2.3 应用迁移到 xcode 9
- android-studio - 无法创建临时文件夹:无法创建临时文件 /tmp/AndroidStudio319FirstRun
- go - 系统找不到指定的路径/指定的文件 grafana
- html - 引导表,如何平均对齐每个?
- php - 分页超过 1 个表格
- html - 标签语法中的额外空格会导致错误吗?(会引起问题)
- r - 要查找元素组是否是 R 或 SAS 中另一个字符串的子字符串?
- python - 如何在python中排序索引后按顺序打印数组中的值?
- node.js - Node.js RESTful Web 服务