Python 当列中的值发生变化时,将元素移位2,然后使用大熊猫向前填充

Python 当列中的值发生变化时,将元素移位2,然后使用大熊猫向前填充,python,pandas,dataframe,forward,Python,Pandas,Dataframe,Forward,我有一个带有日期索引和100列股票价格的熊猫数据框架 我希望每只股票,当价格发生变化时,有一个滞后2,然后在远期填充 两列的Eg数据(我的数据子集): 现在我想要的输出是: Stock A Stock B 1/1/2000 1/2/2000 1/3/2000 1/4/2000 1/5/2000 100 1/6/2000 100 1/7/2000 100 1/8/2000 100 50 1/9/2

我有一个带有日期索引和100列股票价格的熊猫数据框架

我希望每只股票,当价格发生变化时,有一个滞后2,然后在远期填充

两列的Eg数据(我的数据子集):

现在我想要的输出是:

    Stock A Stock B
1/1/2000        
1/2/2000        
1/3/2000        
1/4/2000        
1/5/2000    100 
1/6/2000    100 
1/7/2000    100 
1/8/2000    100 50
1/9/2000    100 50
1/10/2000   350 50
1/11/2000   350 50
1/12/2000   350 50
1/1/2001    350 25
1/2/2001    500 25
1/3/2001    500 25
1/4/2001    500 25
1/5/2001    500 25
1/6/2001    500 25
1/7/2001    500 25
1/8/2001    500 25
1/9/2001    250 25
1/10/2001   250 25
1/11/2001   250 150
1/12/2001   250 150
1/1/2002    250 150
股票A的例子:

当库存A第一次更改(100到350)时,之前的值(100)被分配到2天前(1/5/200)。然后,当它再次从350变为500时,350被分配到提前2天(2000年1月10日)等…然后进行正向填充

任何帮助都将不胜感激

df.where(df.diff(-1).fillna(0).ne(0)).shift(2).ffill()

                A      B
2000-01-01    NaN    NaN
2000-02-01    NaN    NaN
2000-03-01    NaN    NaN
2000-04-01    NaN    NaN
2000-05-01  100.0    NaN
2000-06-01  100.0    NaN
2000-07-01  100.0    NaN
2000-08-01  100.0   50.0
2000-09-01  100.0   50.0
2000-10-01  350.0   50.0
2000-11-01  350.0   50.0
2000-12-01  350.0   50.0
2001-01-01  350.0   25.0
2001-02-01  500.0   25.0
2001-03-01  500.0   25.0
2001-04-01  500.0   25.0
2001-05-01  500.0   25.0
2001-06-01  500.0   25.0
2001-07-01  500.0   25.0
2001-08-01  500.0   25.0
2001-09-01  250.0   25.0
2001-10-01  250.0   25.0
2001-11-01  250.0  150.0
2001-12-01  250.0  150.0
2002-01-01  250.0  150.0
df.where(df.diff(-1).fillna(0).ne(0)).shift(2).ffill()

                A      B
2000-01-01    NaN    NaN
2000-02-01    NaN    NaN
2000-03-01    NaN    NaN
2000-04-01    NaN    NaN
2000-05-01  100.0    NaN
2000-06-01  100.0    NaN
2000-07-01  100.0    NaN
2000-08-01  100.0   50.0
2000-09-01  100.0   50.0
2000-10-01  350.0   50.0
2000-11-01  350.0   50.0
2000-12-01  350.0   50.0
2001-01-01  350.0   25.0
2001-02-01  500.0   25.0
2001-03-01  500.0   25.0
2001-04-01  500.0   25.0
2001-05-01  500.0   25.0
2001-06-01  500.0   25.0
2001-07-01  500.0   25.0
2001-08-01  500.0   25.0
2001-09-01  250.0   25.0
2001-10-01  250.0   25.0
2001-11-01  250.0  150.0
2001-12-01  250.0  150.0
2002-01-01  250.0  150.0