2 回答
![?](http://img1.sycdn.imooc.com/545869470001a00302200220-100-100.jpg)
TA贡献1827条经验 获得超8个赞
有几种方法可以做到这一点。其中之一是提取年份,按年份排序,并删除具有重复月日对的行。
# separate year and month-day pairs
df['year'] = df['ColA'].apply(lambda x: x[:4])
df['mo-day'] = df['ColA'].apply(lambda x: x[5:])
df.sort_values('year', inplace=True)
print(df)
这是分离和排序后的样子:
ColA year mo-day
2 2020-04-12 2020 04-12
3 2020-04-08 2020 04-08
4 2020-04-12 2020 04-12
0 2021-04-03 2021 04-03
1 2021-04-08 2021 04-08
之后,我们可以简单地删除重复项并删除附加列:
# drop duplicate month-day pairs
df.drop_duplicates('mo-day', keep='first', inplace=True)
# get rid of the two columns
df.drop(['year','mo-day'], axis=1, inplace=True)
# since we dropped duplicate, reset the index
df.reset_index(drop=True, inplace=True)
print(df)
最后结果:
ColA
0 2020-04-12
1 2020-04-08
2 2021-04-03
这比将整个列转换为日期时间并提取日期要快得多,因为您按原样使用字符串。
![?](http://img1.sycdn.imooc.com/54584c5e0001491102200220-100-100.jpg)
TA贡献1783条经验 获得超4个赞
我不确定您是否可以摆脱使用“应用”来提取日期的相关部分进行分组,但如果您首先将该列转换为 pandas 日期时间类型,这会容易得多:
df = pd.DataFrame({'colA':
["2021-04-03",
"2021-04-08",
"2020-04-12",
"2020-04-08",
"2020-04-12"]})
df['colA'] = df.colA.apply(pd.to_datetime)
然后您可以按(日、月)分组并保留最高值,如下所示:
df.groupby(df.colA.apply(lambda x: (x.day, x.month))).max()
添加回答
举报