python - Python基于单列添加缺失的行
问题描述
我有一个包含两个感兴趣的列的数据框:一个包含名称的列(对每门课程重复),以及一个包含他们学习或开始的课程名称的列。问题是,如果我按原样使用数据框,如果一个人没有尝试过该课程,他们将根本没有显示该课程的价值,因此我将无法判断谁错过了课程。有没有办法自动生成带有名称的缺失行?其他列可以是 N/A 或其他任何内容。
数据框:
姓名 | 课程名称 | 完成日期 |
---|---|---|
标记 | 数学 | 2021 年 1 月 1 日 |
标记 | 英语 | 2021 年 2 月 1 日 |
标记 | 经济 | 2021 年 3 月 1 日 |
大卫 | 数学 | 2021 年 7 月 1 日 |
大卫 | 英语 | 2021 年 4 月 1 日 |
辛迪 | 数学 | 2021 年 6 月 1 日 |
辛迪 | 英语 | 2021 年 9 月 1 日 |
辛迪 | 经济 | 2021 年 11 月 1 日 |
我在找什么:
姓名 | 课程名称 | 完成日期 |
---|---|---|
标记 | 数学 | 2021 年 1 月 1 日 |
标记 | 英语 | 2021 年 2 月 1 日 |
标记 | 经济 | 2021 年 3 月 1 日 |
大卫 | 数学 | 2021 年 7 月 1 日 |
大卫 | 英语 | 2021 年 4 月 1 日 |
大卫 | 经济 | 不适用 |
辛迪 | 数学 | 2021 年 6 月 1 日 |
辛迪 | 英语 | 2021 年 9 月 1 日 |
辛迪 | 经济 | 2021 年 11 月 1 日 |
解决方案
尝试使用pivot
并stack
使用reset_index
:
>>> df.pivot(*df).stack(dropna=False)[::-1].reset_index(name='Completion Date')
Name Course Title Completion Date
0 Mark Math 1/1/2021
1 Mark English 2/1/2021
2 Mark Econ 3/1/2021
3 David Math 7/1/2021
4 David English 4/1/2021
5 David Econ NaN
6 Cindy Math 6/1/2021
7 Cindy English 9/1/2021
8 Cindy Econ 11/1/2021
>>>
如果您特别希望它是N/A
,请尝试:
>>> df.pivot(*df).stack(dropna=False)[::-1].reset_index(name='Completion Date').fillna('N/A')
Name Course Title Completion Date
0 Mark Math 1/1/2021
1 Mark English 2/1/2021
2 Mark Econ 3/1/2021
3 David Math 7/1/2021
4 David English 4/1/2021
5 David Econ N/A
6 Cindy Math 6/1/2021
7 Cindy English 9/1/2021
8 Cindy Econ 11/1/2021
>>>
推荐阅读
- mysql - 当应用于 MySQL 表列中的变量时,+0E0 究竟做了什么?
- pandas - 计算不同年份的每日平均值(日期时间)
- django - Celery/systemd 不与我的 django 应用程序对话
- java - 如何将opentrace拦截器添加到restTemplate?
- reactjs - 使用 React 在按键上播放声音
- python - If else 具有多个条件的函数-Python
- java - 如何将 Mapstruct 与 Ad Hoc Setter 一起使用
- sql - 使用一张表过滤另一张表而不连接
- javascript - 更改 div 的背景颜色,如果它包含包含带有 jquery 的特定字符串的 href
- .net - .AsNoTracking() 不工作实体框架核心 5