2 回答

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
這比將整個列轉換為日期時間并提取日期要快得多,因為您按原樣使用字符串。

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()
添加回答
舉報