Pandas DataFrame按Date分组统计多列值计数(百万行数据)
按日期分组统计多列数值计数的解决方案
问题背景
DataFrame存有数百万行数据,需按Date列分组,分别统计另外两列的数值计数,但现有代码仅实现了日期自身的计数,未满足需求。
现有代码(仅实现日期计数)
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True) df1 = df['Date'].dt.date.value_counts().sort_index().reset_index() df1.columns = ['DATE','Count']
可行解决方案
场景1:统计每日期下各列的总行数(含非空值)
假设需统计的两列为Col1和Col2,使用groupby+agg的方式,效率适配百万级数据:
# 标准化日期格式,统一为日期类型(去除时分秒) df['Date'] = pd.to_datetime(df['Date'], dayfirst=True).dt.date # 按Date分组,分别统计两列的计数 result = df.groupby('Date').agg( Count_Col1=('Col1', 'count'), # count()自动排除空值,若要统计所有行用size() Count_Col2=('Col2', 'count') ).reset_index() # 重命名日期列以匹配预期输出格式 result.rename(columns={'Date': 'DATE'}, inplace=True)
场景2:统计每日期下各列不同数值的出现频次
如果需求是统计每日期内各列中不同值的出现次数,可按如下方式实现:
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True).dt.date # 分别按[日期+列]分组统计频次 col1_stats = df.groupby(['Date', 'Col1']).size().reset_index(name='Col1_Count') col2_stats = df.groupby(['Date', 'Col2']).size().reset_index(name='Col2_Count') # 合并两个统计结果(按需选择关联方式) final_result = pd.merge(col1_stats, col2_stats, on='Date', how='outer')
核心注意事项
- 先标准化
Date格式为dt.date,避免因时分秒差异导致分组错误 - 百万级数据优先使用
groupby原生方法,避免循环操作以保证效率 count()会排除空值,若需统计包含空值的所有行数,替换为size()即可
内容的提问来源于stack exchange,提问作者KarSho
相关产品推荐
相关产品推荐

