我有一个像这样的pandas数据框:
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)
但数据框索引中存在间隙,表示周末。
我可以从第二行到结尾遍历索引,返回上一行并添加值吗?
答案 0 :(得分: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