我的数据(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

我的最终结果需要一个计划(最近的一个),每个名字.

当前I:删除所有Plan NaN值,然后按服务日期排序,并使用以下代码删除除最近日期之外的所有日期:

df = df.dropna(subset=['Plan'])
df = df.sort_values('Date').drop_duplicates('Name', keep='last')

这基本上是可行的,但我需要"大学"优先于"工作",当两者在同一天放在一起.在上面的数据中,这一行:| 2022 | John | Work |将是防止删除重复项的行,而不是带有"College"的行.

一切都正常,除了这一小部分,日期是重复的,有两个不同的计划.

在一个没有Pandas 的环境中,我会这样想:

如果服务日期重复,其中一个==大学,另一个==任何其他日期:

我需要的最终结果是:

Date Name Plan
2022 John College
2021 Kel College
2022 James Work
2019 Daron College
2019 JQ NaN
2021 Mel Work
2018 Shama Work

如果有道理,请告诉我,

推荐答案

您可以使用"计划"的自定义排序,其中您优先考虑"大学"而不是"工作".这里利用了有序Categorical,但您也可以使用字典中的映射:

(df
 .assign(cat=pd.Categorical(df['Plan'], categories=['Work', 'College'],
                            ordered=True))
 .sort_values(by=['Date', 'cat'], na_position='first')
 .drop(columns='cat')
 .groupby('Name', as_index=False).last()
)

输出:

    Name  Date     Plan
0  Daron  2019  College
1     JQ  2019     None
2  James  2022     Work
3   John  2022  College
4    Kel  2021  College
5    Mel  2021     Work
6  Shama  2018     Work

Python相关问答推荐

为什么在FastAPI中创建与数据库的连接时需要使用生成器?

不允许 Select 北极滚动?

如何在一组行中找到循环?

如何训练每一个pandaprame行的线性回归并生成斜率

为什么在Python中00是一个有效的整数?

Polars时间戳同步延迟计算

如何在Pandas中用迭代器求一个序列的平均值?

为什么在更新Pandas 2.x中的列时,数据类型不会更改,而在Pandas 1.x中会更改?

如何将django url参数传递给模板&S url方法?

pyspark where子句可以在不存在的列上工作

Wagail:当通过外键访问索引页时,如何过滤索引页的子项

如何判断变量可调用函数的参数是否都属于某个子类?

在行数据为向量的DataFrame上计算逐行更改

从语法生成后出现Antlr4 Python运行时错误

Python Pandas-如果满足多个条件,则将列表添加到数据框单元格

如何根据预定义的模板重新排序YAML键并维护注释?

JAX效率问题中的多元导数

基于字典查找乘法将列添加到Pandas框架中,然后求和

获取文本文件并创建CSV文件

Discord.py按钮后出现的 Select 菜单