1

我有以下熊猫 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)

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

4

2 回答 2

1

groupby您可以使用,idxmax和尝试其他方式slice

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.checkdateISO8601格式/标准,所以字典顺序对应于时间顺序

于 2019-12-29T21:49:49.697 回答
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
于 2019-12-29T21:55:52.437 回答