亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取熊貓數據框中列的先前非 NaN 值以進行計算

獲取熊貓數據框中列的先前非 NaN 值以進行計算

守著星空守著你 2023-02-15 16:02:47
我有以下 pd df 時間序列,其中有收盤價、確定何時開倉 (1) 或平倉 (-1) 的過濾器、倉位大小和總計(大小*收盤):Date        Close   Filter  O_Size  O_Tot1/5/2018    15.85   1       74      1172.91/8/2018    16.50   0       ... 2/14/2018   16.49   0       2/15/2018   16.03   -1      ...當Filter的值為-1時,我想新建一個列C_Tot = Close * O_Size,當size不為NaN時,取之前的值。Date        Close   Filter  O_Size  O_Tot    C_Tot1/5/2018    15.85   1       74      1172.91/8/2018    16.50   0       ... 2/14/2018   16.49   0       2/15/2018   16.03   -1                        1186.22...我想知道我是否可以在沒有循環的情況下做到這一點。
查看完整描述

1 回答

?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

我使用您在此處提供的有限數據創建了它。在使用它之前將所有空單元格設為 nan。


import pandas as pd

import numpy as np


v=[["1/5/2018",15.85 ,  1,       74 ,     1172.9],

["1/8/2018",16.50 ,0       ,np.nan,np.nan],

["2/14/2018" , 16.49,   0  ,np.nan,np.nan]     ,

["2/15/2018",   16.03,   -1      ,np.nan,np.nan]]


df=pd.DataFrame(v,columns=["Date","Close","Filter","O_Size","O_Tot"])


tmp = df[df.Filter==-1]


def func(x):

    spl = df.iloc[:x.name,:]

    val = spl.iloc[spl["O_Size"].last_valid_index()].O_Size*x.Close

    return val


tmp["C_Tot"] = tmp.apply(func,axis=1)

res = pd.concat([df,tmp["C_Tot"]],axis=1)

輸出


        Date  Close  Filter  O_Size   O_Tot    C_Tot

0   1/5/2018  15.85       1    74.0  1172.9      NaN

1   1/8/2018  16.50       0     NaN     NaN      NaN

2  2/14/2018  16.49       0     NaN     NaN      NaN

3  2/15/2018  16.03      -1     NaN     NaN  1186.22


查看完整回答
反對 回復 2023-02-15
  • 1 回答
  • 0 關注
  • 92 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號