首页 > 解决方案 > 基于特定值的具有最近日期的输出行

问题描述

我有一个 5 列的 DataFrame。我需要在代码、class_id 和最近日期上具有相同值的行。

code        class_id            grade       date          class_name
7            48                   b          01/12/17      algebra
8            85                   a          07/28/08      calculus
10           50                   b          12/12/10      geometry
7            48                   c          07/10/19      history
23           48                   b          12/8/14       literature
8            85                   d          01/01/2020    economics

输出

7            48                   c          07/10/19      history
8            85                   d          01/01/2020    economics

标签: pythonpandas

解决方案


string日期转换为datetime对象,然后执行groupby示例merge 代码

df['date1'] = pd.to_datetime(df['date'], format='%d/%M/%y', errors='coerce', exact=False)
df2 = df.groupby(['code', 'class_id']).agg({
    'date1' : 'max',
    'grade' : 'count'
}).reset_index()
df2 = df2[df2['grade'] > 1].drop(columns=['grade'])
df2.merge(df, how='left', on=['code', 'class_id', 'date1'])

上面代码的输出如下

   code  class_id               date1 grade        date class_name
0     7        48 2019-01-07 00:10:00     c    07/10/19    history
1     8        85 2020-01-01 00:01:00     d  01/01/2020  economics

推荐阅读