如何用Python按日期分组统计日期区间内的记录数?
Python实现日期区间内日期计数统计
需求说明
给定包含起始日期(Start_date)和结束日期(End_Date)的数据集,统计每个日期在多少个区间内出现,最终按日期分组输出计数结果。
示例数据
原始数据:
| index | Start_date | End_Date |
|---|---|---|
| 1 | 2020-01-01 | 2020-01-02 |
| 2 | 2020-01-01 | 2020-01-03 |
| 3 | 2020-01-02 | 2020-01-04 |
期望输出:
| index | date | count |
|---|---|---|
| 1 | 2020-01-01 | 2 |
| 2 | 2020-01-02 | 3 |
| 3 | 2020-01-03 | 2 |
| 4 | 2020-01-04 | 1 |
实现代码
import pandas as pd # 构造原始数据集 raw_data = { 'index': [1, 2, 3], 'Start_date': ['2020-01-01', '2020-01-01', '2020-01-02'], 'End_Date': ['2020-01-02', '2020-01-03', '2020-01-04'] } df = pd.DataFrame(raw_data) # 将字符串日期转换为datetime类型,便于日期序列生成 df['Start_date'] = pd.to_datetime(df['Start_date']) df['End_Date'] = pd.to_datetime(df['End_Date']) # 遍历每行数据,生成区间内所有日期并收集 all_dates = [] for _, row in df.iterrows(): # 生成包含起始和结束日期的每日序列 date_range = pd.date_range(start=row['Start_date'], end=row['End_Date'], freq='D') all_dates.extend(date_range) # 统计各日期出现次数,按日期排序并整理结构 count_result = pd.Series(all_dates).value_counts().sort_index().reset_index() count_result.columns = ['date', 'count'] # 添加自增索引列 count_result.insert(0, 'index', range(1, len(count_result)+1)) # 将日期格式转回字符串(与示例格式保持一致) count_result['date'] = count_result['date'].dt.strftime('%Y-%m-%d') # 输出结果 print(count_result)
代码说明
- 日期类型转换:将字符串格式的日期转为
datetime类型,是生成日期序列的前提。 - 生成日期序列:通过
pd.date_range生成每个区间内的所有日期,确保包含起始和结束日期。 - 统计与排序:用
value_counts()统计日期出现次数,sort_index()保证日期按时间顺序排列。 - 结构调整:添加自增索引列,并将日期转回字符串格式,匹配期望输出的样式。
内容的提问来源于stack exchange,提问作者bergpot
相关产品推荐
相关产品推荐

