2016-11-26 5 views
1

私は、次のデータフレームのcummax()値を取得しています、のpythonパンダ - cummaxでインデックスのタイムスタンプ値を取得する()

     exit_price trend netgain  high  low MFE_pr 
exit_time                 
2000-02-01 01:00:00  1400.25  -1  1.00 1401.50 1400.25 1400.25 
2000-02-01 01:30:00  1400.75  -1  0.50 1401.00 1399.50 1399.50 
2000-02-01 02:00:00  1400.00  -1  1.25 1401.00 1399.75 1399.50 
2000-02-01 02:30:00  1399.25  -1  2.00 1399.75 1399.25 1399.25 
2000-02-01 03:00:00  1399.50  -1  1.75 1400.00 1399.50 1399.25 
2000-02-01 03:30:00  1398.25  -1  3.00 1399.25 1398.25 1398.25 
2000-02-01 04:00:00  1398.75  -1  2.50 1399.00 1398.25 1398.25 
2000-02-01 04:30:00  1400.00  -1  1.25 1400.25 1399.00 1398.25 
2000-02-01 05:00:00  1400.25  -1  1.00 1400.50 1399.25 1398.25 
2000-02-01 05:30:00  1400.50  -1  0.75 1400.75 1399.50 1398.25 

次式

trade ['MFE_pr'] = np.nan 
trade ['MFE_pr'] = trade ['MFE_pr'].where(trade ['trend']<0, trade.high.cummax()) 
trade ['MFE_pr'] = trade ['MFE_pr'].where(trade ['trend']>0, trade.low.cummin()) 

とする方法がありますcummax()が各行から取得される行のタイムスタンプを取得しますか? .idxmax()に似ていますが、cummax()に似ていますか?

答えて

1

これはおそらくあなたが探しているものです。

import pandas as pd 
import datetime 
df = pd.DataFrame({'a': [1, 2, 1, 3, 2, 5, 4, 3, 5]}, 
        index=pd.DatetimeIndex(start= 
             datetime.datetime.fromtimestamp(0), 
             periods=9, freq='D')) 
df['cummax'] = df.a.cummax() 
df['timestamp'] = df.index 
df = df.merge(df.groupby('cummax')[['timestamp']].first().reset_index(), on='cummax') 
df.rename(columns={'timestamp_y': 'max_timestamp'}, inplace=True) 
df.index=df.timestamp_x.values 
del df['timestamp_x'] 
print(df) 


        a cummax  max_timestamp 
1970-01-01 03:00:00 1  1 1970-01-01 03:00:00 
1970-01-02 03:00:00 2  2 1970-01-02 03:00:00 
1970-01-03 03:00:00 1  2 1970-01-02 03:00:00 
1970-01-04 03:00:00 3  3 1970-01-04 03:00:00 
1970-01-05 03:00:00 2  3 1970-01-04 03:00:00 
1970-01-06 03:00:00 5  5 1970-01-06 03:00:00 
1970-01-07 03:00:00 4  5 1970-01-06 03:00:00 
1970-01-08 03:00:00 3  5 1970-01-06 03:00:00 
1970-01-09 03:00:00 5  5 1970-01-06 03:00:00 
+0

はい、これは非常に便利です。 'df ['timestamp'] = df.index' インデックスに直接アクセスする方法はありませんか? –

+0

私は確かに言うことはできませんが、 'df.groupby(...).first()'は元のデータフレームのインデックスを失うようです。 'as_index = False'オプションを追加しようとしましたが、動作しません。私は現在、索引のコピーでテンポラリー列を作成せずにこれを行う方法を見つけることができません。 –

関連する問題