【发布时间】:2022-07-20 22:15:19
【问题描述】:
我的数据 (df) 如下所示:
| Date | Name | Plan |
|---|---|---|
| 2022 | John | College |
| 2022 | John | Work |
| 2021 | Kel | College |
| 2022 | James | Work |
| 2019 | Daron | College |
| 2019 | JQ | NaN |
| 2020 | Mel | College |
| 2017 | Shama | Work |
| 2021 | John | Nan |
| 2020 | John | Work |
| 2021 | Mel | Work |
| 2018 | Shama | Work |
我的最终结果需要一个计划(最近的一个),每个名字。
目前我:删除所有计划 NaN 值,然后按服务日期排序,并使用此代码删除除最近日期之外的所有日期:
df = df.dropna(subset=['Plan'])
df = df.sort_values('Date').drop_duplicates('Name', keep='last')
这主要是可行的,但是当两者在同一日期放在一起时,我需要“大学”优先于“工作”。在上面的数据中,这一行:| 2022 |约翰 |工作 |将是避免删除重复项的那个,而不是带有“College”的那个。
一切正常,除了这个日期重复的小部分并且有两个不同的计划。
在非熊猫设置中,我会这样认为:
如果服务日期重复并且一个 == 大学和其他 == 其他任何内容: 然后把那个留在大学里
我需要的最终结果:
| Date | Name | Plan |
|---|---|---|
| 2022 | John | College |
| 2021 | Kel | College |
| 2022 | James | Work |
| 2019 | Daron | College |
| 2019 | JQ | NaN |
| 2021 | Mel | Work |
| 2018 | Shama | Work |
让我知道这是否有意义, 谢谢!
【问题讨论】:
-
类似
df.sort_values('Date', ascending=False).groupby('Name').first().reset_index()