Pandas 基于相互依赖的滞后值计算列

Posted

技术标签:

【中文标题】Pandas 基于相互依赖的滞后值计算列【英文标题】:Pandas calculating column based on inter-dependent lagged values 【发布时间】:2018-12-26 17:56:23 【问题描述】:

我有一个如下所示的数据框。最右边的两列是我想要的列:

Open    Close   open_to_close   close_to_next_open  open_desired    close_desired
0          0       0                  3             0                  0
0          0       4                  8             3                  7
0          0       1                  1            15                 16

计算如下:

open_desired = close_desired(prior row) + close_to_next_open(prior row)
close_desired = open_desired + open_to_close

如何以循环方式实现以下内容?我正在尝试这样做直到最后一行。

 df = pd.DataFrame('open': [0,0,0], 'close': [0,0,0], 'open_to_close': [0,4,1], 'close_to_next_open': [3,8,1]) 
 df['close_desired'] = 0 
 df['open_desired'] = 0
 ##First step is to create open_desired in current row which is dependent on close_desired in previous row
 df['open_desired'] = df['close_desired'].shift() + df['close_to_next_open'].shift()
 ##second step is to create close_desired in current row which is dependent on open_desired in current row
 df['close_desired'] = df['open_desired'] + df['open_to_close']
 df.fillna(0,inplace=True)

【问题讨论】:

有什么问题? 我发现了两个问题。您需要初始化列“close_desired”,并且在第二行代码中您有一个错字(“close”应该是“close”)。最后做一个df.fillna(0,inplace=True) @xyzjayne 谢谢,做了第二行编辑。我是 python 新手。如何初始化“close_desired”? df['close_desired'] = 0 没有该行,df 在第一行有两个 NaN 条目,因为 shift() 为第一行生成 NaN 值。 fillna 用零替换 NaN。 【参考方案1】:

我能想到的唯一方法是使用iterrows()

for row, v in df.iterrows():
    if row>0:
        df.loc[row,'open_desired'] = df.shift(1).loc[row, 'close_desired'] + df.shift(1).loc[row, 'close_to_next_open']
        df.loc[row,'close_desired'] = df.loc[row, 'open_desired'] + df.loc[row, 'open_to_close']

【讨论】:

感谢您的解决方案! if row>0 在循环中做什么? 它避免了第一行,因为它会写一个 NaN,它会被结转并将所有值呈现为 NaN 它对我有用。在接受此答案之前稍等片刻,以免阻止其他用户回答。

以上是关于Pandas 基于相互依赖的滞后值计算列的主要内容,如果未能解决你的问题,请参考以下文章

pandas基于shift偏移dataframe中时间列计算相邻两列的时间差如果shift参数为1则指定列向下移动1个位置,使用后向填充进行缺失值填充

pandas有没有计算低于某个值的函数

pandas计算滑动窗口中的最小值实战(Rolling Minimum in a Pandas Column):计算单数据列滑动窗口中的最小值计算多数据列滑动窗口中的最小值

Pandas 表示基于另一列的某些列(二进制值)

使用 pandas/dataframe 基于 2 列计算加权平均值

如何在不创建临时列的情况下从 pandas 数据框列计算最小值?