我有以下熊猫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)
但是如何将这两件事放在一起?
答案 0 :(得分: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.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