如何在Pandas中获取行数最多的分组(按天分组场景)
获取行数最多分组的原始数据
嘿,我来帮你搞定这个需求!你已经完成了按天统计行数的步骤,现在只需要几步就能拿到行数最多那天的原始数据,给你两种实用方法:
首先先回顾下你的基础数据和已完成的统计代码:
import pandas as pd df1=pd.DataFrame({'x1':[5,5,4,6],'x2':[5,5,6,7], 'time':['11/7/2019','11/7/2019', '11/7/2019','12/7/2019']}) xx = (pd.to_datetime(df1['time']) .dt.floor('d') .value_counts() .rename_axis('date') .reset_index(name='count'))
方法一:基于已有统计结果筛选
既然你已经有了统计好的xx数据框,咱们直接从中找出行数最多的日期,再去原始数据里匹配对应的记录:
# 找到行数最多的日期(利用idxmax找到最大count的索引,再取出对应的date) max_date = xx.loc[xx['count'].idxmax(), 'date'] # 转换原始数据的time列为日期格式,筛选匹配max_date的记录 result = df1[pd.to_datetime(df1['time']).dt.floor('d') == max_date] print(result)
运行后会输出你想要的结果:
x1 x2 time 0 5 5 11/7/2019 1 5 5 11/7/2019 2 4 6 11/7/2019
方法二:直接分组筛选(更高效)
其实不用单独生成xx统计框,咱们可以直接对原始数据按天分组,然后一步筛选出最大的组:
# 按格式化后的日期分组 grouped = df1.groupby(pd.to_datetime(df1['time']).dt.floor('d')) # 找到组内数据量最大的那个组的日期 max_group_date = max(grouped, key=lambda x: len(x[1]))[0] # 获取该组的全部原始数据 result = grouped.get_group(max_group_date) print(result)
这个方法省去了单独统计的步骤,数据量较大时会更高效。
小提示
- 一定要注意日期格式的一致性:原始
time列是字符串,必须用pd.to_datetime转换后再和统计出的datetime类型日期做匹配,避免格式不匹配导致筛选失败。
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

