2016-05-27 7 views
1

で2列に影響を与える変更を適用します。 bet_plとco_plは2つの天びんの日々の変化を追跡します。私はco_plとcumsumに基づいてco_balanceを更新しました。パンダは、私は以下のデータフレームを持っていると同時に

init_balance = D('100.0') 
co_thresh = D('1.05') * init_balance 

def get_pl_co(row): 
    if row['eod_bet_balance'] > co_thresh: 
     diff = row['eod_bet_balance']- co_thresh 
     return(diff) 
    else: 
     return Decimal('0.0') 


df_odds_winloss['eod_bet_balance'] = df_odds_winloss['bet_pl'].cumsum()+initial_balance 
df_odds_winloss['sod_bet_balance']= df_odds_winloss['eod_bet_balance'].shift(1).fillna(init_balance) 
df_odds_winloss['co_pl'] = df_odds_winloss.apply(get_pl_co, axis=1) 
df_odds_winloss['co_balance'] = df_odds_winloss['co_pl'].cumsum() 

# trying this 
df_odds_winloss['eod_bet_balance'] = df_odds_winloss['eod_bet_balance'] - df_odds_winloss['co_pl'] 

は今、私はそれが2つの残高間の転送であるようeod_bet_balanceが負co_plで更新したいのですが、右のEOD(一日の終わり)の残高を取得しておりません。

誰もがヒントを与えることはできますか?

UPDATED:eod_balancesはbet_plの変化はなく、co_plで、その後の変更を反映します。

FINAL UPDATE:

initial_balance = D('100.0') 
df = pd.DataFrame({ 'SP': res_df['SP'], 'winloss': bin_seq_l}, columns=['SP', 'winloss']) 
df['bet_pl'] = df.apply(get_pl_lvl, axis=1) 
df['interim_balance'] = df_odds_winloss['bet_pl'].cumsum()+initial_balance 
df['co_pl'] = (df['interim_balance'] - co_thresh).clip_lower(0) 
df['co_balance'] = df_odds_winloss['co_pl'].cumsum() 
df['post_co_balance'] = df['interim_balance'] - df['co_pl'] 
bf_r = D('0.05') 
df['post_co_deduct_balance'] = df['post_co_balance'] - (df['post_co_balance']* bf_r) 
df['sod_bet_balance'] = df['post_co_deduct_balance'].shift(1).fillna(init_balance) 

The final solution

+0

それはあなたが投稿データフレームは、望ましい結果(その場合には、あなたの現在の出力は何ですか?)、またはあなたの現在の出力であるかどうかは不明だ(何その場合には、希望の結果?)。 =のDF [「co_pl」] ' - – aldanor

+0

私は – codervince

+0

なぜあなたは単に行わない'のDF [「neweod_bet_balance」]を見たいのですがどのように現在の出力プラスの情報を反映するように更新しますか? – pacholik

答えて

1

まず、あなたがco_plを取得するには、カスタム関数を適用する必要はありません、それはそうのように行うことができる:

df['co_pl'] = (df['eod_bet_balance'] - co_thresh).clip_lower(0) 

として、他の列を更新するために、私が正しく理解したら、次のようなものが欲しい:

df['eod_bet_balance'] = df['eod_bet_balance'].clip_upper(co_thresh) 

または、同等に...

df['eod_bet_balance'] -= df['co_pl'] 
+0

clip_lower refをお寄せいただきありがとうございます。私が持っていた問題は、さまざまな操作をインラインで行うことともっと関係していました。最後に、私は計算を順次行い、別々のシリーズを使用することにしました。これにより所望の結果が得られた。 – codervince

関連する問題