You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:05:12