5

次のような 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)

ただし、週末を表すデータフレーム インデックスにはギャップがあります。

2 行目から最後までインデックスを反復処理し、前の行を参照して値を追加できますか?

4

1 に答える 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

sを修正するには、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
于 2013-09-29T10:56:52.083 に答える