如何将带DateTime索引的Pandas DataFrame累积值转换为普通频率值
日度累积Pandas DataFrame转当日非累积值实现方法
核心逻辑是计算相邻行累积值的差值,即可得到对应周期的新增非累积值,操作步骤如下:
- 第一步先确认DataFrame的DateTime索引已经按时间升序排列,避免时序颠倒导致计算结果错误
- 第二步使用Pandas内置的
diff()方法计算相邻行的差值,该方法默认会将第一行的计算结果设为空值,直接用第一行的原始累积值补全即可
单累积列转换代码示例
假设你的累积数据DataFrame命名为cum_df,存储累积值的列名为cum_val,需要生成的非累积日度值列名为daily_val:
import pandas as pd # 按时间索引升序排序 cum_df = cum_df.sort_index() # 计算差分并补全第一行空值 cum_df['daily_val'] = cum_df['cum_val'].diff().fillna(cum_df['cum_val'].iloc[0])
多累积列同时转换代码示例
如果DataFrame内所有列都是累积值,可直接对全表执行操作:
non_cum_df = cum_df.diff().fillna(cum_df.iloc[0])
特殊场景说明
如果你的累积值存在固定周期重置规则(比如每月初清零重新累积),需要先按重置周期分组后再执行差分,避免跨周期的差值计算错误。按月度重置的参考代码如下:
cum_df['daily_val'] = cum_df.groupby(cum_df.index.to_period('M'))['cum_val'].diff().fillna(cum_df['cum_val'])
示例对照
原始累积数据表:
转换后的输出结果示例:
内容的提问来源于stack exchange,提问作者vishal krishna
相关产品推荐
相关产品推荐

