如何在Pandas中对DataFrame补全日期并计算累计求和值?
解决Pandas中补全日期并计算累计求和的问题
原始数据
给定如下DataFrame:
Date Value 2023-05-20 2 2023-05-22 4 2023-05-22 3 2023-05-24 5
需求:补全最小日期到最大日期之间的所有日期,并计算截至当日的累计求和值,最终结果如下:
Date ValueCum 2023-05-20 2 2023-05-21 2 2023-05-22 9 2023-05-23 9 2023-05-24 14
实现步骤
1. 预处理数据
先导入pandas,将数据转为DataFrame,并把Date列转为日期类型:
import pandas as pd # 构造原始数据 data = { 'Date': ['2023-05-20', '2023-05-22', '2023-05-22', '2023-05-24'], 'Value': [2, 4, 3, 5] } df = pd.DataFrame(data) df['Date'] = pd.to_datetime(df['Date'])
2. 按日期聚合求和
把同一天的多条记录合并,计算单日的总Value:
daily_sum = df.groupby('Date')['Value'].sum().reset_index()
这一步后得到的中间结果:
Date Value 0 2023-05-20 2 1 2023-05-22 7 2 2023-05-24 5
3. 生成完整日期序列
根据原始数据的最小、最大日期,生成连续的日期索引:
date_range = pd.date_range(start=df['Date'].min(), end=df['Date'].max()) full_dates = pd.DataFrame({'Date': date_range})
4. 合并并填充缺失值
将聚合后的单日数据和完整日期序列合并,缺失的Value用0填充:
merged_df = pd.merge(full_dates, daily_sum, on='Date', how='left').fillna(0)
5. 计算累计求和
对填充后的Value列计算累计求和,得到目标列ValueCum:
merged_df['ValueCum'] = merged_df['Value'].cumsum().astype(int) # 保留需要的列 result = merged_df[['Date', 'ValueCum']]
最终结果
运行上述代码后,result即为需求中的目标DataFrame:
Date ValueCum 0 2023-05-20 2 1 2023-05-21 2 2 2023-05-22 9 3 2023-05-23 9 4 2023-05-24 14
内容的提问来源于stack exchange,提问作者Henning
相关产品推荐
相关产品推荐

