是否可以在 Pandas 列中獲取給定值并將其更改為前一行值?例如,我有這個(gè)數(shù)據(jù)框:Date Price Signal2018-01-01 13380.00 12018-01-02 14675.11 02018-01-03 14919.51 02018-01-04 15059.54 02018-01-05 16960.39 02018-01-06 17069.79 -12018-01-07 16150.03 02018-01-08 14902.54 02018-01-09 14400.00 12018-01-10 14907.09 02018-01-11 13238.78 02018-01-12 13740.01 -12018-01-13 14210.00 0我想將信號(hào)列中的零替換為 1 或 -1。最終的DF應(yīng)該是這樣的:Date Price Signal2018-01-01 13380.00 12018-01-02 14675.11 12018-01-03 14919.51 12018-01-04 15059.54 12018-01-05 16960.39 12018-01-06 17069.79 -12018-01-07 16150.03 -12018-01-08 14902.54 -12018-01-09 14400.00 12018-01-10 14907.09 12018-01-11 13238.78 12018-01-12 13740.01 -12018-01-13 14210.00 -1
3 回答

慕的地8271018
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
嘗試這個(gè):
df['Signal'].replace(to_replace=0, method='ffill')
(假設(shè)你的 DataFrame 被稱為 df)

MM們
TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊
import?pandas?as?pd
準(zhǔn)備數(shù)據(jù)框
如果你有一個(gè)數(shù)據(jù)框:
df?=?pd.DataFrame([1,0,1,0,1],?columns=['col1'])
使用純 apply()
你可以做:
def?replace(num):? ???if?num==1:?return?1 ????if?num==0:?return?-1
然后將其應(yīng)用于包含要替換的值的列:
df['new']=df['col1'].apply(replace)
apply() lambda 函數(shù)
您可以使用lambda 函數(shù)實(shí)現(xiàn)相同的目的:
df['col1'].apply(lambda?row:?1?if?row?==?1?else?-1)
使用內(nèi)置方法
使用我們準(zhǔn)備的數(shù)據(jù)框,可以做:
df['new']?=?df['col1'].replace(to_replace=0,?value=-1)
如果您不想創(chuàng)建新列,只需直接替換現(xiàn)有列中的值,就地進(jìn)行即可:
df['col1'].replace(to_replace=0,?value=-1,inplace=True)
清理
如果創(chuàng)建了一個(gè)新列并且不想保留舊列,可以將其刪除:
df.drop('col1',axis=1)

白板的微信
TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果您想要將以前的值傳播到下一行,請(qǐng)使用以下命令:
df["Signal"] = df["Signal"].ffill()
添加回答
舉報(bào)
0/150
提交
取消