如何在Pandas第二栏的基础上消除重复?

2024-09-29 20:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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列,只保留yearid

我该怎么做


Tags: importid示例dataframepandasdfdateas
2条回答

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)

然后排序…

非常类似于@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

groupbyidxmax

同样,我保留了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

相关问题 更多 >

    热门问题