【问题标题】:Python Pandas: How to choose a certain option within duplicatesPython Pandas:如何在重复项中选择某个选项
【发布时间】: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()

标签: python pandas


【解决方案1】:

您可以对“计划”使用自定义排序,其中“大学”优先于“工作”:

(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()
)

【讨论】:

    猜你喜欢
    • 2022-11-15
    • 2018-11-07
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2017-08-13
    • 2012-04-11
    • 2018-02-24
    相关资源
    最近更新 更多