当前位置: 首页 > 知识库问答 >
问题:

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

丁宏盛
2023-03-14

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

我想每只股票,当有价格变化时,有一个2的滞后,然后向前填充。

如2列数据(我的数据子集):

         Stock A    Stock B
1/1/2000    100 50
1/2/2000    100 50
1/3/2000    100 50
1/4/2000    350 50
1/5/2000    350 50
1/6/2000    350 50
1/7/2000    350 25
1/8/2000    350 25
1/9/2000    500 25
1/10/2000   500 25
1/11/2000   500 25
1/12/2000   500 150
1/1/2001    250 150
1/2/2001    250 150
1/3/2001    250 150
1/4/2001    250 150
1/5/2001    250 150
1/6/2001    250 150
1/7/2001    250 150
1/8/2001    75  150
1/9/2001    75  150
1/10/2001   75  25
1/11/2001   75  25
1/12/2001   75  25
1/1/2002    75  25
    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

如有任何帮助,不胜感激。

共有1个答案

王声
2023-03-14
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
 类似资料:
  • 问题内容: 如果我有一个包含多列的数据框,如何只填充一列?还是一组列? 我只知道如何按轴进行操作。 问题答案: tl; dr: 我还添加了一个自我包含的示例:

  • 问题内容: 我正在分析一个时间序列,并基于某些条件,我可以挑选出事件 开始 或 结束 的行。此时,我的系列看起来像这样(为简洁起见,我省略了一些重复的值): 设置 这是我想要实现的( 理想情况下没有循环) 这是我尝试过的 通过对数据质量的一些乐观假设,我可以获得如下 事件编号 : 然后,我可以将其恢复到原始数据框,并使用 问题 如您所见,事件之间的时间(01:20到02:20)与事件#1相关联。

  • 我有一个带有几列的。其中一列包含使用货币的符号,例如欧元或美元符号。另一列包含预算值。例如,在一行中,它可能意味着5000欧元的预算,而在下一行中,它可能意味着2000美元的预算。 在熊猫我想添加一个额外的列到我的DataFrame,正常化的欧元预算。所以基本上,对于每一行,如果货币列中的符号是欧元符号,新列中的值应该是预算列中的值*1,新列中的值应该是预算列的值*0.78125如果货币栏中的符号

  • 然后,我会添加初始值,然后查看这个数据,从前面的行计算新行,例如左右。 我目前使用的代码如下所示,但我觉得它有点难看,必须有一种方法直接使用DataFrame来实现这一点,或者只是一种更好的方法。注意:我使用的是Python2.7。

  • 我从熊猫数据帧文档开始:数据结构简介 我想在一个时间序列类型的计算中迭代地填充数据帧。所以基本上,我想用列A、B和时间戳行初始化数据帧,全0或全NaN。 然后,我会添加初始值并检查这些数据,根据之前的行计算新行,比如说< code > row[A][t]= row[A][t-1]1 左右。 我目前正在使用下面的代码,但我觉得它有点难看,必须有一种方法直接用数据帧来做这件事,或者一般来说是一种更好的

  • 问题内容: 我已经看到了将一个列/系列分解为Pandas数据框的多个列的主题的几种变体,但是我一直在尝试做点事情,而实际上并没有成功地使用现有方法。 给定这样的一个DataFrame: 我想将系列中的项目转换为以值作为值的列,如下所示: 我觉得这应该是相对简单的事情,但是由于卷积水平的提高,我已经为此花了几个小时不停地努力,但没有成功。 问题答案: 有几种方法: 使用: 使用: 使用后跟: