基于Pandas生成日期区间内的日期计数DataFrame
Pandas生成连续日期序列并统计原日期出现次数
前提准备
首先要确保原DataFrame的date列是datetime类型,否则无法正确生成连续日期范围:
import pandas as pd # 构造原DataFrame df = pd.DataFrame({ 'date': ['2022-02-01', '2022-02-03', '2022-02-01', '2022-02-04', '2022-02-27'], 'column_1': ['val', 'val1', 'val', 'val2', 'val2'], 'column_2': ['val2', 'val', 'val3', 'val', 'val4'] }) # 转换date列为datetime类型 df['date'] = pd.to_datetime(df['date'])
实现步骤
- 生成完整日期范围
从原数据的最小日期到最大日期,生成所有连续日期:
full_dates = pd.date_range(start=df['date'].min(), end=df['date'].max())
- 统计原日期出现次数
用value_counts统计每个日期在原DataFrame中的出现次数:
date_counter = df['date'].value_counts().rename('counter')
- 合并并填充缺失值
将完整日期序列转成DataFrame,和统计结果做左连接,把未出现的日期计数填充为0:
result = pd.DataFrame({'date': full_dates}) result = result.merge(date_counter, left_on='date', right_index=True, how='left') # 填充缺失值为0,并转为整数类型 result['counter'] = result['counter'].fillna(0).astype(int)
最终输出
运行后result的结果完全符合需求:
| date | counter |
|---|---|
| 2022-02-01 | 2 |
| 2022-02-02 | 0 |
| 2022-02-03 | 1 |
| 2022-02-04 | 1 |
| ... | ... |
| 2022-02-26 | 0 |
| 2022-02-27 | 1 |
内容的提问来源于stack exchange,提问作者Carola
相关产品推荐
相关产品推荐

