如何根据熊猫第二栏摆脱重复?

时间:2019-05-20 21:02:54

标签: python pandas

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

我该怎么做?

2 个答案:

答案 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

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