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

如何按日期合并日期不匹配的DataFrame(缺失日期补0)

解决日期不匹配的DataFrame合并并填充缺失值问题

我来帮你搞定这个合并DataFrame的问题,刚好我之前也遇到过类似的场景,给你一套完整的解决方案:

步骤1:导入数据并处理日期格式

首先我们需要导入CSV数据,并且确保日期列是datetime类型,这对后续的日期处理至关重要:

import pandas as pd

# 替换成你的CSV文件路径
df = pd.read_csv('your_data.csv')
# 将日期列转换为datetime类型,确保后续日期操作正常
df['日期'] = pd.to_datetime(df['日期'])

步骤2:按状态拆分数据集

根据激活/取消状态拆分原始数据,这里假设你的状态列名为状态,对应的值是激活和取消,如果实际列名或值不同,记得自行调整:

# 筛选激活状态的数据
activated_df = df[df['状态'] == '激活']
# 筛选取消状态的数据
cancelled_df = df[df['状态'] == '取消']

步骤3:数据透视(按日期聚合总和)

使用pivot_table按日期聚合激活量和取消量的总和:

# 透视激活数据,聚合每日激活量总和
pivot_activated = activated_df.pivot_table(index='日期', values='激活量', aggfunc='sum')
# 透视取消数据,聚合每日取消量总和
pivot_cancelled = cancelled_df.pivot_table(index='日期', values='取消量', aggfunc='sum')

步骤4:对齐完整日期范围并合并填充0

这是解决日期不匹配问题的核心步骤:先生成2017年全年的完整日期序列,再将两个透视表对齐到这个序列,缺失的日期自动填充0,最后合并成一个DataFrame:

# 生成2017年1月1日到12月31日的完整每日日期序列
full_date_range = pd.date_range(start='2017-01-01', end='2017-12-31', freq='D')

# 将透视表重索引到完整日期范围,缺失值填充为0
pivot_activated_full = pivot_activated.reindex(full_date_range, fill_value=0)
pivot_cancelled_full = pivot_cancelled.reindex(full_date_range, fill_value=0)

# 横向合并两个处理后的DataFrame
merged_df = pd.concat([pivot_activated_full, pivot_cancelled_full], axis=1)
# 给列重命名,让结果更直观
merged_df.columns = ['每日激活总量', '每日取消总量']

这样处理后,你得到的merged_df就包含了2017年每一天的激活量和取消量,哪怕某一天没有对应数据,也会用0填充,完美解决日期不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:25:34