如何在Pandas中筛选最大日期/时间对应的数据行?
筛选DataFrame中对应最大日期时间的数据行
问题说明
现有构造好的DataFrame,需筛选出仅对应最大日期/时间的数据行用于后续分析:
原始构造代码
# importing pandas library import pandas as pd player_list = [['2022-10-12 12:10',50000,1], ['2022-10-12 12:10',51000,1], ['2022-10-12 17:10',51500,1], ['2022-10-12 17:10',53000,2], ['2022-10-13 12:11',57009,2], ['2022-10-13 12:11',53001,4], ['2022-10-13 17:10',56250,4], ['2022-10-13 17:10',54000,4]] # creating a pandas dataframe df = pd.DataFrame( player_list,columns = ['sanp_date', 'hits', 'state']) df['sanp_date'] = df['sanp_date'].astype('datetime64[ns]') # printing dataframe print(df) print() # checking the type print(df.dtypes)
当前输出
sanp_date hits state 0 2022-10-12 12:10:00 50000 1 1 2022-10-12 12:10:00 51000 1 2 2022-10-12 17:10:00 51500 1 3 2022-10-12 17:10:00 53000 2 4 2022-10-13 12:11:00 57009 2 5 2022-10-13 12:11:00 53001 4 6 2022-10-13 17:10:00 56250 4 7 2022-10-13 17:10:00 54000 4 sanp_date datetime64[ns] hits int64 state int64 dtype: object
期望筛选结果
sanp_date hits state 0 2022-10-13 17:10:00 56250 4 1 2022-10-13 17:10:00 54000 4
解决方案
以下是两种高效的实现方式:
方法1:获取最大日期后直接筛选
先提取sanp_date列的最大值,再通过布尔索引筛选对应行:
# 获取最大日期时间 max_datetime = df['sanp_date'].max() # 筛选对应行 filtered_df = df[df['sanp_date'] == max_datetime] # 打印结果 print(filtered_df)
方法2:使用query方法简化代码
利用pandas的query方法直接在表达式中计算最大值并完成筛选:
filtered_df = df.query('sanp_date == sanp_date.max()') print(filtered_df)
两种方法均会输出符合期望的结果,且时间复杂度低,适合处理大规模数据集。
内容的提问来源于stack exchange,提问作者Alan Paul
相关产品推荐
相关产品推荐

