如何解决根据当前数据框添加缺失的行并将列值设置为零
dic= {'distinct_id': {0: 1,1: 2,2: 3,3: 4,4: 5},'first_name': {0: 'Joe',1: 'Barry',2: 'David',3: 'marcus',4: 'Anthony'},'activity': {0: 'Jump',1: 'Jump',2: 'Run',3: 'Run',4: 'climb'},'tasks_completed': {0: 3,1: 3,3: 3,4: 1},'tasks_available': {0: 3,4: 3}}
tasks = pd.DataFrame(dic)
我试图让每个 id/name 对为每个独特的活动都有一行,例如我希望“Joe”有活动列是“Run”和“climb”的行,但我希望他在 tasks_completed 列中有一个 0(那些行不存在已经意味着他没有完成这些活动任务)。我曾尝试使用 df.iterrows() 并列出唯一 ID 和活动名称并检查它们是否都存在,但是没有用。非常感谢任何帮助!
这就是我希望拥有的:
1: 2,4: 5,5: 1,6: 1,7: 2,8: 2,9: 3,10: 3,11: 4,12: 4,13: 5,14: 5},'email': {0: 'Joe',4: 'Anthony',5: 'Joe',6: 'Joe',7: 'Barry',8: 'Barry',9: 'David',10: 'David',11: 'marcus',12: 'marcus',13: 'Anthony',14: 'Anthony'},4: 'climb',5: 'Run',6: 'climb',7: 'Run',8: 'climb',9: 'Jump',10: 'climb',11: 'climb',12: 'Jump',13: 'Run',14: 'Jump'},4: 1,5: 0,6: 0,7: 0,8: 0,9: 0,10: 0,11: 0,12: 0,13: 0,14: 0},4: 3,5: 3,6: 3,7: 3,8: 3,11: 3,12: 3,13: 3,14: 3}}
pd.DataFrame(tasks_new)
解决方法
idx_cols = ['distinct_id','first_name','activity']
tasks.set_index(idx_cols).unstack(fill_value=0).stack().reset_index()
distinct_id first_name activity tasks_completed tasks_available
0 1 Joe Climb 0 0
1 1 Joe Jump 3 3
2 1 Joe Run 0 0
3 2 Barry Climb 0 0
4 2 Barry Jump 3 3
5 2 Barry Run 0 0
6 3 David Climb 0 0
7 3 David Jump 0 0
8 3 David Run 3 3
9 4 Marcus Climb 0 0
10 4 Marcus Jump 0 0
11 4 Marcus Run 3 3
12 5 Anthony Climb 1 3
13 5 Anthony Jump 0 0
14 5 Anthony Run 0 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。