import pandas as pd
df = pd.DataFrame({
'year': [2017, 2018, 2018, 2019, 2019],
'date': ['01.01.2017', '22.04.2018', '31.01.2018', '19.03.2019', '03.12.2019'],
'id': ['72297143', '6de190ee', '0e1e8e89', 'ab4f99ab', '7d81a711']
})
对于year
列中的每个复制值(如2019和2019),我想保留具有最新date
的值(在上面的示例中为03.12.2019)。
最后,我想删除date
列,仅保留year
和id
。
我该怎么做?
答案 0 :(得分:1)
在sort_values
之后使用drop_duplicated
df.date=pd.to_datetime(df.date,dayfirst=True)
yourdf=df.sort_values('date').drop_duplicates('year',keep='last')
yourdf
Out[413]:
year date id
0 2017 2017-01-01 72297143
1 2018 2018-04-22 6de190ee
4 2019 2019-12-03 7d81a711
yourdf.drop('id',axis=1,inplace=True)
答案 1 :(得分:1)
非常类似于@WeNYoBen。区别在于,我将保持现有的date
不变,并按转换后的值进行排序。
df.iloc[pd.to_datetime(df.date, dayfirst=True).argsort()] \
.drop_duplicates('year', keep='last')
year date id
0 2017 01.01.2017 72297143
1 2018 22.04.2018 6de190ee
4 2019 03.12.2019 7d81a711
groupby
和idxmax
同样,我将保留date
中原始数据类型的所有内容。如果需要实际的日期时间,将结果分配给数据框很简单。
df.loc[pd.to_datetime(df.date, dayfirst=True).groupby(df.year).idxmax()]
year date id
0 2017 01.01.2017 72297143
1 2018 22.04.2018 6de190ee
4 2019 03.12.2019 7d81a711