如何在Pandas DataFrame中偏移索引且保持内容完整?
相邻周期DataFrame处理方案
Hey there, 看你提到有两个分别对应周期X和周期X-1的DataFrame(周期支持日/月度),先把你给出的示例数据清晰呈现出来,再给你几个实用的处理操作和代码片段:
数据示例
DF(周期X)
Item 1 Item 2 2018-01-02 0.431 0.656 2018-01-03 0.439 0.668 2018-01-04 0.447 0.680 2018-01-05 0.455 0.692 2018-01-08 0.479 0.729 2018-01-09 0.487 0.741 2018-01-10 0.495 0.753
DF(周期X-1)
Item 1 Item 2 2018-01-02 0.429 0.651 2018-01-03 0.431 0.656 2018-01-04 0.439 0.668 2018-01-05 0.447 0.680 2018-01-08 0.455 0.692 2018-01-09 0.479 0.729 ...
常用处理操作
1. 合并数据做同日期对比
如果想要把两个周期的数值放在同一行方便查看,直接按日期索引合并即可:
import pandas as pd # 确保索引是 datetime 类型(如果还不是的话) df_x.index = pd.to_datetime(df_x.index) df_x_prev.index = pd.to_datetime(df_x_prev.index) # 合并并添加后缀区分周期 merged_df = pd.merge(df_x, df_x_prev, left_index=True, right_index=True, suffixes=('_X', '_X-1'))
合并后你就能直观看到每个日期下两个周期的指标差异。
2. 计算环比变化率
这应该是处理相邻周期数据最常见的需求了,计算当前周期相对上一周期的变化百分比:
# 先对齐两个DataFrame的日期 aligned_df = df_x.join(df_x_prev, rsuffix='_prev') # 计算环比((当前值-上周期值)/上周期值 * 100) aligned_df['Item1_环比(%)'] = ((aligned_df['Item 1'] - aligned_df['Item 1_prev']) / aligned_df['Item 1_prev']) * 100 aligned_df['Item2_环比(%)'] = ((aligned_df['Item 2'] - aligned_df['Item 2_prev']) / aligned_df['Item 2_prev']) * 100
3. 筛选变化显著的记录
如果需要找出指标波动超过某个阈值的日期,用布尔索引就能轻松实现:
# 设定波动阈值,比如2% threshold = 2 # 筛选Item1或Item2环比超过阈值的记录 significant_changes = aligned_df[ (abs(aligned_df['Item1_环比(%)']) > threshold) | (abs(aligned_df['Item2_环比(%)']) > threshold) ]
如果还有更具体的需求(比如月度周期的特殊对齐、缺失值处理等),可以补充说明细节哦!
内容的提问来源于stack exchange,提问作者DGMS89
相关产品推荐
相关产品推荐

