Python Pandas数据框添加前一行的值

5

I have a pandas dataframe that looks like this:

                     AAPL   IBM  GOOG  XOM
2011-01-10 16:00:00  1500     0     0    0
2011-01-11 16:00:00     0     0     0    0
2011-01-12 16:00:00     0     0     0    0
2011-01-13 16:00:00 -1500  4000     0    0
2011-01-14 16:00:00     0     0     0    0
2011-01-18 16:00:00     0     0     0    0

我的目标是通过添加上一行的值来填充行。结果看起来像这样:

                     AAPL   IBM  GOOG  XOM
2011-01-10 16:00:00  1500     0     0    0
2011-01-11 16:00:00  1500     0     0    0
2011-01-12 16:00:00  1500     0     0    0
2011-01-13 16:00:00     0  4000     0    0
2011-01-14 16:00:00     0  4000     0    0
2011-01-18 16:00:00     0  4000     0    0

我试图通过以下方式迭代数据框索引:

    for date in df.index:

并且可以增加日期

    dt_nextDate = date + dt.timedelta(days=1)

但是数据框索引中有代表周末的间隙。

我能否从第二行开始迭代索引,参考前一行并添加值?


看起来像是乔治亚理工学院的“交易机器学习”作业任务。 - joshmcode
1个回答

9
您的示例结果并非示例算法的输出,因此我不确定您确切要求什么?
您展示的期望结果是一个累积求和,您可以使用以下方法获得:
>>> df.cumsum()
                    AAPL   IBM  GOOG  XOM
index                                    
2011-01-1016:00:00  1500     0     0    0
2011-01-1116:00:00  1500     0     0    0
2011-01-1216:00:00  1500     0     0    0
2011-01-1316:00:00     0  4000     0    0
2011-01-1416:00:00     0  4000     0    0
2011-01-1816:00:00     0  4000     0    0

但是您所要求的和您展示的算法更可能是一个窗口大小为2的滚动总和:
>>> result = pd.rolling_sum(df, 2)
>>> result
                    AAPL   IBM  GOOG  XOM
index                                    
2011-01-1016:00:00   NaN   NaN   NaN  NaN
2011-01-1116:00:00  1500     0     0    0
2011-01-1216:00:00     0     0     0    0
2011-01-1316:00:00 -1500  4000     0    0
2011-01-1416:00:00 -1500  4000     0    0
2011-01-1816:00:00     0     0     0    0

为了修复“NaN”,只需执行以下操作:
>>> result.iloc[0,:] = df.iloc[0,:]
>>> result
                    AAPL   IBM  GOOG  XOM
index                                    
2011-01-1016:00:00  1500     0     0    0
2011-01-1116:00:00  1500     0     0    0
2011-01-1216:00:00     0     0     0    0
2011-01-1316:00:00 -1500  4000     0    0
2011-01-1416:00:00 -1500  4000     0    0
2011-01-1816:00:00     0     0     0    0

1
累加和正是我正在寻找的东西。非常感谢您的帮助! - Georges Cunty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接