如何按日期对值排序并按列删除重复项?

时间:2019-12-29 21:35:40

标签: python pandas

我有以下熊猫DataFrame df

import pandas as pd

mydictionary = {'id': ['11X', '11X', '22X', '33A'],
    'grade': [68, 74, 77, 78],
    'checkdate': ["2019-12-26", "2019-12-27", "2019-12-26", "2019-12-25"]}

df = pd.DataFrame(mydictionary)

我想按checkdate对值进行排序,并按id删除重复项,同时保留最新的条目。

预期结果是这样的

id    grade   checkdate
11X   74      2019-12-27
22X   77      2019-12-26
33A   78      2019-12-25

我知道如何对值进行排序:

df.sort_values("checkdate")

此外,我知道如何删除重复项:

df.drop_duplicates(subset=["id"], keep='first', inplace=True)

但是如何将这两件事放在一起?

2 个答案:

答案 0 :(得分:1)

您可以使用groupbyidxmaxslice

尝试其他方式
df_out = df.loc[df.groupby('id').checkdate.idxmax()]

Out[1199]:
    id  grade  checkdate
1  11X     74 2019-12-27
2  22X     77 2019-12-26
3  33A     78 2019-12-25

注释df.checkdate的格式/标准为ISO8601,因此字典顺序对应于时间顺序

答案 1 :(得分:1)

您可以尝试:

import pandas as pd

mydictionary = {'id': ['11X', '11X', '22X', '33A'],
                'grade': [68, 74, 77, 78],
                'checkdate': ["2019-12-26", "2019-12-27", "2019-12-26", "2019-12-25"]}

df = pd.DataFrame(mydictionary)

df['checkdate'] = pd.to_datetime(df['checkdate'])
df2 = df.sort_values(by=['checkdate']).drop_duplicates('id', keep='last')
print(df2)

结果:

    id  grade  checkdate
3  33A     78 2019-12-25
2  22X     77 2019-12-26
1  11X     74 2019-12-27