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

Pandas统计指定日期范围内各分组出现次数并合并到DataFrame

实现方案

不需要逐行遍历df2,用pandas内置的向量化操作处理效率更高,整体流程如下:

  • 统一日期格式:将日期边界值、df2的Date列全部转为datetime类型,避免字符串格式日期比较出现逻辑错误
  • 筛选出Date字段落在min_date和max_date区间内的有效记录
  • 统计有效记录中A、B两个分组的出现频次
  • 将统计结果作为新列追加到初始DataFramedf1中

完整代码

import pandas as pd
from datetime import datetime

# 定义日期范围
max_date = datetime.today().strftime('%d-%m-%Y')
min_date = "06-08-2021"

# 构造样例数据
details = {
    'Name' : ['Name1'],
    'Value' : [23],
}
df1 = pd.DataFrame(details)

details = {
    'Date' : ['07-08-2021', '07-08-2021', '06-08-2021', '09-08-2021','07-08-2021','07-08-2021','06-08-2021','03-08-2020'],
    'Group' : ['A', 'A', 'A', 'A','A','B','B','A'],
}
df2 = pd.DataFrame(details)

# 核心处理
# 按日-月-年格式解析所有日期,避免解析错误
df2['Date'] = pd.to_datetime(df2['Date'], format='%d-%m-%Y')
min_dt = pd.to_datetime(min_date, format='%d-%m-%Y')
max_dt = pd.to_datetime(max_date, format='%d-%m-%Y')

# 筛选日期范围内的有效行
valid_rows = df2[(df2['Date'] >= min_dt) & (df2['Date'] <= max_dt)]

# 统计分组计数,无对应分组时默认填充0,避免KeyError
group_counts = valid_rows['Group'].value_counts()
df1['count_A'] = group_counts.get('A', 0)
df1['count_B'] = group_counts.get('B', 0)

运行结果

执行代码后打印df1,即可得到期望输出:

Name  Value  count_A  count_B
0  Name1     23        5        2

补充说明:如果后续分组类型不止A、B两类,可以用pd.crosstab或者pivot_table实现动态列生成,不需要硬编码分组列名。

内容的提问来源于stack exchange,提问作者Jnl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:12:35