2016-11-28 22 views
0

の終わりに与えられた行から分の機能を取得し、私は、そのような私が邪魔に分機能付きMAE_pr列を移入したい次のpythonパンダ - データフレーム

      low MFE_pr    MFE_ts MAE_pr 
exit_time               
2000-02-01 01:00:00 1400.25 1400.25 2000-02-01 01:00:00  NaN 
2000-02-01 01:30:00 1399.50 1399.50 2000-02-01 01:30:00  NaN 
2000-02-01 02:00:00 1399.75 1399.50 2000-02-01 01:30:00  NaN 
2000-02-01 02:30:00 1399.25 1399.25 2000-02-01 02:30:00  NaN 
2000-02-01 03:00:00 1399.50 1399.25 2000-02-01 02:30:00  NaN 
2000-02-01 03:30:00 1398.25 1398.25 2000-02-01 03:30:00  NaN 
2000-02-01 04:00:00 1398.25 1398.25 2000-02-01 03:30:00  NaN 
2000-02-01 04:30:00 1399.00 1398.25 2000-02-01 03:30:00  NaN 
2000-02-01 05:00:00 1399.25 1398.25 2000-02-01 03:30:00  NaN 
2000-02-01 05:30:00 1399.50 1398.25 2000-02-01 03:30:00  NaN 

としてパンダのデータフレームを持っています

trade ['MAE_pr'] = trade.low.min() 

しかし、私は、各行の分列全体に計算するたくないが、テーブルの端にMFE_tsでmentionnedタイムスタンプの低値から行ごとに次のような。

どのように分を実行するようなサブセットを選択するつもりですか? cumminとの最後の行分間たとえば

テーブルの端

+0

特定の期間を選択し、選択した期間に 'cummin()'を適用しますか? – estebanpdl

+0

はい、最後の行の例のように、cumminはタイムスタンプ3:30からテーブルの最後までの "低"列の値で計算されます –

+0

cumminはベクトルを返しますが、それぞれに満たすスカラーセルしかありません結果。したがって、3:30に始まる結果のカミンベクトルのすべての値の中で、あなたがMFE_prを記入する値は何ですか? – Boud

答えて

0

にタイムスタンプ3時30分から「低」カラムの値に基づいて計算されることになるアイデアは、取得するために、実際に良好な出発点でありますベクトル化されたアルゴリズムあなたが実際にはcumminを検索していることを把握することです:指定されたポイントから最後まであなたのデータフレームが逆さまになっている場合は、カミンです。だからそれをやりましょう。データフレームの降順の並べ替え、低コラムに対するクミン計算:

df['rcummin'] = df.sort_index(ascending=False).low.cummin() 

rcumminを今あなたが探していた累積最小値が含まれています。適切な値を取得して、それぞれMFE_ts datetimeに対応する分を取得するようになりました。あなたは既に、時系列の日付時刻とのデータフレームをインデックス化している。そのような権利ことをやってするのは簡単にそれを作る:

df.MAE_pr = df.loc[df.MFE_ts].rcummin 
df.MAE_pr 

exit_time 
2000-02-01 01:00:00 1398.25 
2000-02-01 01:30:00 1398.25 
2000-02-01 01:30:00 1398.25 
2000-02-01 02:30:00 1398.25 
2000-02-01 02:30:00 1398.25 
2000-02-01 03:30:00 1398.25 
2000-02-01 03:30:00 1398.25 
2000-02-01 03:30:00 1398.25 
2000-02-01 03:30:00 1398.25 
2000-02-01 03:30:00 1398.25 
Name: rcummin, dtype: float64 

あなたのデータの例では、結果を視覚化するためにクールではないですが、あなたは4時30分に一つの日時を持っていて言いますその行の結果として1399.00が得られます。

関連する問題